はてなブログの言及記事を取得しようとした

たぶんこちらの記事が発端で,いろんな人たちがそれぞれプログラミングでつまづいたところなどの記事を書いています.

satoru-takeuchi.hatenablog.com

(自分も書いてみたり: プログラミングでつまづいてきたこと 自分の場合 - kamocyc’s blog)

あと,はてなブログで言及している一覧が表示されなくなったという記事がありました.

p-shirokuma.hatenadiary.com

せっかくなので,なんとかして言及している記事を自動で取得できないかとやってみました. しかし結論を言うと,あまりうまくいきませんでした.

手段

意外なことに,はてなブログ全体の検索機能は(株)はてなは実装していないようで,Googleカスタム検索しかないようです.

これで言及されたブログのタイトルやURLを検索してみても,うまくヒットしませんでした.(そのまま検索すると関係ないページがたくさん出てくる.引用符でくくるとヒットしない) 一般的に被リンクの検索はGoogleではできないので,専用のサービスを使うなどしないと難しそうです.

仕方ないので,記事へのはてなブックマークを辿ってクロールしてみることにしました.

はてなブックマークによるクロール

はてなブックマークなどのページの通信を見てみると,ブックマークはJSONで別途やりとしていたり, 割とデータを独立して通信させてプログラムから扱いやすい感じになっているところが多くありました.

あと,はてなブログにはRSSリーダが自動で実装されているので,それを使いました.

辿り方

2つ実装しました.

その1

  1. 元記事(言及される記事)をはてなブックマークしているユーザIDを取得
  2. ユーザIDからそのユーザのはてなブログRSSを取得
  3. RSSに含まれるブログの本文を検索し,元記事のURLが含まれている記事のURLを取得

その2

  1. 元記事の作者のユーザIDを取得
  2. ユーザIDからそのユーザのはてなブックマークの一覧を取得
  3. ブックマーク先のページを1つずつ読み込んで検索し,元記事のURLが含まれているページのURLを取得

その1は「元記事をブックマークしたユーザは,それに関連する記事を書いているかもしれない」, その2は「記事を言及されると記事の作者に通知が行くので,言及している記事をブックマークするかもしれない」という考えに基づきます.

結果

ここのリポジトリにコードを置きました(URLをはてな運営のブログにしていますが,本当は通常のはてなブログユーザの記事のURLを指定して使います): GitHub - kamocyc/hatenablog-backlink-crawler: はてなブログの言及記事を取得しようとしたもの

nodejs (typescript) で作っています.

で,最初に載せたプログラミングでつまづいたところの記事を言及している記事を取得しようとしたところ, 見つかったのは以下の2つだけでした.

プログラミングでつまづいてきたこと(koogawa編) - koogawa blog

ITしくじり先生をやれということでしょうか - だいたいどうでもいい内容

一方,Google検索とかtogetterのまとめでは,もっと多くの記事が出てきました.

あまり取得できなかった原因の一つとしては,

  • 必ずしもブックマークして,かつ言及記事を書いているわけではない
  • はてなブログ以外のブログを書いている人も多い
  • ブックマークを非公開にしている人もけっこういる

ということがあります.

ほかの方法

ほかに考えられるクロールの方法を書いておきます.

1. twitterで検索

ちょっとtwitter APIのアカウントを作って触ってみたり,手動で検索してみたりしましたが,難しそうです.

単純に必ずしも元記事をツイートして,かつ言及記事を書いて,それをツイートしているなら検索は比較的楽だと思ったのですが,そういうわけでもないです.

単に他の人がリツイートしたのを見て記事を書くというパターンも十分有りますが,フォロワーやリツイート先のフォロワーを全部検索して, というのはけっこうな数になって無料枠内だと厳しそうです. (はてなをいじるのに疲れてあまり試していません.)

2. Google Custom Search APIで検索

これは1つの方法として有望だと思います. 実際,手で検索してみると,新たに1件記事がヒットしました.

プログラミングで初学者のときにつまづいたこと - Javaエンジニア、React+Redux+Firebaseでアプリを作る

ただ,グローバルで検索するとまとめサイトみたいなものが多数ヒットして,精度が微妙な感じになりそうです. また,ドメインを絞って検索すると先ほど載せた2つの記事はヒットしまかったので,漏れもそれなりにありそうです.

まとめ

やはり今は共有はTwitterで行うのが主流ということなのでしょうか.

一覧が見れないという不便さを感じてプログラムを書いてみましたが,簡単なプログラムではなかなか解決は難しそうです.