Iruca Log

読者です 読者をやめる 読者になる 読者になる

Iruca Log

東京に住むWeb系エンジニアによるデータ分析ブログ

SNSでフォローする!

pythonから任意のURLをはてなブックマークに追加する [はてなREST API]

目次

はじめに

はてなのAPIを使って何かしてみたいなーと思って、
とりあえずpythonから任意のURLをはてなブックマークに追加するプログラムを作りました。

前準備

アプリケーション登録

はてなブックマークのREST APIを使用するためには、はてなにユーザ登録した後に自分の作りたいアプリケーションを登録してConsumer Key, Consumer Secretという文字列を手に入れたあと、アクセストークンとアクセストークンシークレットを生成する必要があります。

下記のページを参考に、consumer key / consumer secret の取得まで行います。
Consumer key を取得して OAuth 開発をはじめよう - Hatena Developer Center


そこからアクセストークン、アクセスシークレットを取得する方法はやや厄介ですが、下記の記事に簡単な取得方法を紹介しています。
www.iruca21.com


また、下記pythonプログラムを利用するにはrequests, requests_oauthlibライブラリが必要なのでインストールしておいてください。

yum -y install python-setuptools
easy_install pip
pip install requests requests_oauthlib

プログラム紹介

あとは単に仕様書を参考にAPIを利用するだけです。


bookmark_util.py

#!/usr/bin/python
#-* coding:utf-8 -*-

"""
任意のURLをはてなブックマークするためのUtility
"""

import requests
from requests_oauthlib import OAuth1


def post_bookmark(auth, url):
    """
    任意のURLをはてなブックマークに登録する。
    Args:
        auth: はてなAPIを使用するためのAccessTokenが入力された、requests_oauthlibのOAuth1オブジェクト
        url: ブックマークしたいURL
    Returns: bookmarkに成功したときやすでにbookmark登録している場合はTrue, リクエスト不正やネットワークエラーなどのときはFalse
    """

    target_url = "http://api.b.hatena.ne.jp/1/my/bookmark"
    response = requests.post(target_url, params={"url": url}, auth=auth)

    if response.status_code == 200:
        return True
    else:
        return False

# このスクリプトを実行したときに試しにブックマークしてみる
if __name__ == "__main__":
    consumer_key = "自分のconsumer keyをここに入力"
    consumer_secret = "自分のconsumer secretをここに入力"
    access_token = "自分のアクセストークンをここに入力"
    access_secret = "自分のアクセスシークレットをここに入力"

    # ブックマークしたいURLをここに入力
    bookmark_url= "http://www.nych87.com/entry/2017/05/28/133711"

    auth = OAuth1( consumer_key, consumer_secret, access_token, access_secret )

    print post_bookmark(auth, bookmark_url )

実行してみた

上記プログラムで、試しににーちさんの記事をはてなブックマーク登録してみます。

[root@hoge hateblo]# python bookmark_util.py
True

ブックマークに成功したらTrueとだけ返ってくるようにしてあります。

実際にブックマークされたか確認しにいってみます。

f:id:iruca21:20170528182228p:plain

うんうん、されてる。満足!
何かアプリ作りたいなー。