アゴ乗せ日記

適当なポジティブ日記

スポンサーリンク

【はてなブログAPI】いいから聞け!スターを勝手につけてくお前ら!まじで【初心者OK】

まじで
ありがとうございます!!

おかげで頑張れます。

今日は私の得意なプログラミングを駆使して
ささやかながらお返しができたらと思う。

何をするのか

はてなのAPIを使い、
誰がどれだけスターをくれたのか確認し、
全力で感謝する!!

やっていく

この前の記事で無料でコード実行できるGoogle Colabっていうサイトを紹介した。

www.agonose-nikki.com

今回もそれを使っていく。

手順は①と②をするだけ。

①まずは以下を貼り付ける。

import requests
import xml.etree.ElementTree as ET
import json

# --------------------------------------------------
# 記事の一覧を取得
# --------------------------------------------------
api_url = "https://blog.hatena.ne.jp/agonosetaro/agonosetaro.hatenablog.com/atom/entry"
auth = ('agonosetaro', 'API_KEY')
entries = []
while True:
  res = requests.get(api_url, auth=auth)
  root = ET.fromstring(res.text)
  api_url = None

  for child in root:
      if 'rel' in child.attrib and child.attrib['rel'] == 'next':
        api_url = child.attrib['href']

      if child.tag.endswith('entry'):
        is_public = False
        title = None
        link = None

        for item in child:
          if item.tag.endswith('control'):
            ctrl = child.find(item.tag)
            for item in ctrl:
              if item.tag.endswith('draft'):
                is_public = ctrl.find(item.tag).text == 'no'
          if item.tag.endswith('title'):
            title = child.find(item.tag).text
          if item.tag.endswith('link') and 'rel' in item.attrib and item.attrib['rel'] == 'alternate':
            link = item.attrib['href']

        if is_public and title:
          entry = {
              'title': title,
              'link': link
          }
          entries.append(entry)
  if not api_url:
    break
  
# --------------------------------------------------
# 各記事からスター情報を取得
# --------------------------------------------------
result = {}
for entry in entries:
  start_url = "http://s.hatena.com/entry.json?uri="
  res = requests.get(start_url + entry['link'])
  star_json = json.loads(res.text)
  if 'entries' in star_json:
    for current in star_json['entries']:
      for star in current['stars']:
        if star['name'] in result:
          result[star['name']] = result[star['name']] + 1
        else:
          result[star['name']] = 1
         
result = sorted(result.items(), key=lambda x:x[1], reverse=True)
print(result) 


②8行目と9行目をそれぞれの環境に合わせて修正する

この部分だが、はてなブログの管理画面から設定 > 詳細設定 > AtomPubにそれぞれ記載されている。

api_url = "https://blog.hatena.ne.jp/agonosetaro/agonosetaro.hatenablog.com/atom/entry"
auth = ('agonosetaro', 'API_KEY')

api_url の部分は下の画面のルートエンドポイントに置き換えて、末尾に/entryを付け加える。このURLから記事の一覧が取得できる。

ログイン情報が必要になるのでauthの部分の左側にユーザID。 ⇨私の場合は「agonosetaro」

右側に下の画面に表示されているAPIキーを入力する。

f:id:agonosetaro:20200324202227p:plain

以上だ。

実行

誰が何個スターを付けてくれたか出力される。

f:id:agonosetaro:20200324210720p:plain

確認は2020/03/24 21:00時点。

過去全ての公開済み記事を対象としているので、 もしかしたら自分より圧倒的に多くの記事数とスター数をお持ちの方は実行に時間がかかるかもしれない。

全力で感謝

YOUBLOGさん。 本当に...足を向けて寝られない。

myself-shizenさん。 いつも投稿してから早い段階でスターをつけてくだり感謝しかないです。ほっと安心できます。

nimotuさん。 すみません、このプログラムを作ってから「こんなに付けてくださっていたのか」と気付きました(自分をぶん殴りたい)。これからもどうぞよろしくお願いしますmm

mkeikeiさん。 いつもありがとうございます。ダイソーの記事の時コメントいただいて嬉しかったですmm

miyutoxさん。 プラモ記事といったらmiyutoxさん!息子ができたら一緒に作りたいなぁ。


事後ですが、迷惑であればお知らせください。

自分、不器用なもんで、、、こんな形でしか感謝を表現できず。。くっ、 申し訳ねぇ。

おわり

今回は単純な数で出してしまったが、
つけてくださった記事数との兼ね合いなども考慮して今後別の結果を出せたらと思う。

また、スターだけではなくブックマークの情報もAPIから取れると思うので、 その辺も時間があればやっていきたい。

以上!!

スポンサーリンク