Iruca Log

Iruca Log

東京に住むWeb系エンジニアによる技術&雑記ブログ

SNSでフォローする!

自分のはてなブログの読者一覧を取得するプログラム書いた [python]

こんにちは、イルカです。

はてなブログの読者数データ分析の記事を書いてから、ブログ読者の数が2倍になりました…本当にありがとうございます!
iruca21.hateblo.jp

今回はまた技術に関する記事です。

最後まで読むのが面倒な方に

自分のブログの読者のはてなID一覧をプログラムから取得できるようにしました。

[root@hoge get_subscribers]# python get_subscribers_util.py
['hamutaro0627', 'necophys', 'wakax2', 'soumushou', 'yosinoo', 'buddha01', 'jamrovin39', 'nigaoolong', 'cruller', 'miyaweblog', 'buzama-www_pipipipipi', 'andshesaid', 'htilcs1115', 'hesocha', 'kosatomo', 'browncapuchin', 'jubenonz', 'masalib', 'ksakae1216', 'lightgauge', 'us_key', 'hiro-loglog', 'rico_note', 'charismadoll', 'cycle8b', 'Hachi32TK', 'smartstyle', 'kagura8736', 'tcambodia', 'milktea489', 'cordoba365-argentina', 'nqumen', 'ponkotsu1215', 'poco89', 'sakagami5', 'nych87', 'jougetu']

今後以下のようなプログラムを書くことで、僕のブログの読者で居てくれる方に何かしらインセンティブを与えられないかを検討しています!

  • ブログの読者になってくれた人の最新ブログ記事に必ずスターをつける
  • ブログの読者になってくれた人のブログ読者になり返す
    • twitterのフォローバックみたいな!

書いたプログラム紹介

必要モジュール

pythonモジュール requests が必要です。
以下の手順などでインストールしておいてください。

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

概要

こちらのURLにアクセスすると、自分のブログの読者一覧を見ることができます。
この機能を利用して、上記URLから取ってきたデータを解析して、読者のはてなID一覧に変換しています。

ご利用は自己責任で!
はてなの運営やサーバに迷惑をかけないようにしましょう。

プログラム詳細

get_subscribers_util.py

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

import requests

"""
自分のはてなブログの読者一覧を取得する
"""

def get_rk( hatena_id, password ):
    """はてなIDとログインパスワードからrkを取得します。
    rkが何なのかはよく分からない。
    """
    target_url = "https://www.hatena.ne.jp/login"
    payload = {'name': hatena_id, 'password': password}
    response = requests.post(target_url, data=payload )

    rk = response.headers["Set-Cookie"].split("rk=")[1].split(";")[0]
    return rk


def get_subscribers( hatena_id, blog_url, rk, ):
    """ 自分のはてなブログの読者一覧を取得します。
    Args:
        hatena_id: 自分のはてなID
        blog_url: 自分のブログのURL
        rk: get_rk関数で得られるトークン文字列
    Returns:
        読者のはてなID文字列のリスト
    """
    subscribers = []

    target_url = "http://blog.hatena.ne.jp/%s/%s/subscribers" % (hatena_id, blog_url )

    headers = {"Cookie" : "rk="+ str(rk) }
    response = requests.get( target_url, headers=headers)


    # 返却されたHTMLから、読者のhatena idが含まれる部分を無理やりsplitで抜き出す
    hatenaid_contained_text_list = response.content.split('data-user-name="')
    del hatenaid_contained_text_list[0] # 最初は "<HTML ..." みたいな文字列が入っちゃうので取り除く

    for hatenaid_contained_text in hatenaid_contained_text_list:
        hatena_id = hatenaid_contained_text.split('"')[0]
        subscribers.append( hatena_id )

    return subscribers

if __name__ == "__main__":
    # 自分のhatena_id
    hatena_id = "XXXXX"
    # 自分のはてなログインパスワード
    login_password = "XXXXX"
    # 自分のブログのURL
    blog_url = "XXXXX"

    rk = get_rk( hatena_id, login_password )

    print get_subscribers(hatena_id, blog_url, rk )

実行してみる

プログラム中の下記設定部分を書き変えてください。

    # 自分のhatena_id
    hatena_id = "XXXXX"
    # 自分のはてなログインパスワード
    login_password = "XXXXX"
    # 自分のブログのURL
    blog_url = "XXXXX"


では、実行してみます。

[root@hoge get_subscribers]# python get_subscribers_util.py
['hamutaro0627', 'necophys', 'wakax2', 'soumushou', 'yosinoo', 'buddha01', 'jamrovin39', 'nigaoolong', 'cruller', 'miyaweblog', 'buzama-www_pipipipipi', 'andshesaid', 'htilcs1115', 'hesocha', 'kosatomo', 'browncapuchin', 'jubenonz', 'masalib', 'ksakae1216', 'lightgauge', 'us_key', 'hiro-loglog', 'rico_note', 'charismadoll', 'cycle8b', 'Hachi32TK', 'smartstyle', 'kagura8736', 'tcambodia', 'milktea489', 'cordoba365-argentina', 'nqumen', 'ponkotsu1215', 'poco89', 'sakagami5', 'nych87', 'jougetu']

おお、取れた取れた。
満足!

まとめ

これで、自分の読者一覧がプログラムから取得できるようになりました。

せっかく自分のブログの読者になってくれた方には、何かしら
「自分のブログの読者で居るとこんな良いことがあるぞ!」というメリットを増やしてみたいんですよね。
自分の記事の更新が通知される、というだけじゃ足りない気がして。

  • ブログの読者になってくれた人の最新ブログ記事には必ずスターをつける
  • ブログの読者になってくれた人のブログ読者になり返す
    • twitterのフォローバックみたいな!

くらいなら、今まで書いてきたプログラムを有効活用すればすぐに書けそう。

夢が膨らむ。プログラミングって楽しいですね。

ではでは!