![見出し画像](https://assets.st-note.com/production/uploads/images/51137518/rectangle_large_type_2_ec848a76ee3f7f6cce000dda46584257.png?width=1200)
ツール作成日記 vol.3 - フォローバックをチェックする
おうち時間を使って、久しぶりにツールの機能追加をしました。
今回は第3弾です。
![画像6](https://assets.st-note.com/production/uploads/images/56538697/picture_pc_85a94445ed72f21ed9137a620bc14de7.png?width=1200)
noteのフォローリストから、相手がフォローしてくれてるかがわかるようにフォローバックのチェック機能を追加してみました。みんながほしかった機能ってこれじゃない??
フォローされていると右端に緑のアイコンが付きます。
![画像6](https://assets.st-note.com/production/uploads/images/56538635/picture_pc_34c842c2de1b7e1cee83b92e4bbdcfba.png?width=1200)
こないだ読んだブログで、ひたすらプログラミングの奮闘模様を記録する記事がとても楽しかったので、わたしも制作日記を書いてみています。
今回、試してみたこと。
ログインをしてみる
まずは前回までのツールにログイン機能が追加できるか試してみました。ツール内でログインをさせることで、ログインしなければ取ってこれないデータにもアクセスできるようになります。
まず、サイトを解析してみるとnoteにはログイン用のAPIが用意されていることがわかります。
(こういう情報ってどこまで開示していいのかアレですけども)ここにID/パスワードを投げるといくつかのCookie情報を戻してくれます。
このうち、_note_session_v5= という名前のCookieがサーバー上にある自分の情報にアクセスする鍵になっているようです。要ログインの情報がほしいときは、この鍵といっしょにアクセスすることでログイン済みかどうかが判定されます。
例えば、ダッシュボードに表示されているPVやらスキ、コメント数なんかの情報も取ってきてツール内で集計したりできるようになります。
みなさんが使っているブラウザはこの処理を裏で自動的にやってくれていますので、試しにnoteログイン済みのブラウザで以下のアドレスをクリックすると面白いですよ。ダッシュボードに表示されている情報がJSON形式のデータで取ってこれると思います。
ダッシュボード用のAPI(要ログイン)
<週>
https://note.com/api/v1/stats/pv?filter=weekly&page=1&sort=pv
<月>
https://note.com/api/v1/stats/pv?filter=monthly&page=1&sort=pv
<年>
https://note.com/api/v1/stats/pv?filter=yearly&page=1&sort=pv
<全期間>
https://note.com/api/v1/stats/pv?filter=all&page=1&sort=pv
定期的に取ってくるプログラムを書けば、何もしなくっても、毎日あるいは毎週どのくらいのアクセスの増減があるのかの情報を自動で一覧化することができたりしそうです。
ただし、これらの情報をツール経由で取得するためには、上記で解析した一連のログインの振る舞いをツール側に作り込まなければなりません。
noteにはだいたいAPIが用意されいる
前回までは、ホームページに表示されたデータを引っ張ってきて、ゴリゴリ必要な箇所を抜き出すみたいなことをやっていたのですが、どうやらnoteはそもそも構造的にデータをすべてAPI経由でとってきたJSONを整形して表示させてるみたい。
アクセスすると下記のようなデータだけが返ってくるAPIが用意されています。
![画像6](https://assets.st-note.com/production/uploads/images/51138055/picture_pc_b349765ee30238290a5fb17e87b1cebe.png)
あんまり最近のWebフロントの技術には明るくないのでよくわかってませんが、、、コードの中にnuxtみたいなワードがちらほら出てくる(ネットで調べてみたら、noteをnuxt化しましたみたいな記事いっぱいある。。。APIも普通にいろんなブログで公開されてたり、はじめからグーグル先生に聞いておけばよかったかも。。。)構造をみてると、nuxt自体がAPI経由で取得したJSONデータをローカルとサーバーの両サイドで制御できる開発基盤なのでしょう。あってる?
フォロワーやフォロー・ユーザを取得するAPIもありました。/licodeenar/の部分を別のnoter IDに変えればそれぞれのリストにアクセスできます。
フォロワー(フォローされているユーザ)を取得するAPI
https://note.com/api/v2/creators/licodeenar/followers?page=1&per=20
フォロー(フォローしているユーザ)を取得するAPI
https://note.com/api/v2/creators/licodeenar/followings?page=1&per=20
そこでツールも、ページからキーワードを抜き出す(パースする)実装じゃなくて、APIから直接JSONデータを取得するように変更してみました。見た目は何もかわりません。ただの興味実装です。
古いAPIにはフォローバック情報がある!?
もともと、このツールを作ったキッカケって、フォローバックの情報を一覧取得してみたかったんです。
フォロワーページの方には、自分がフォローしているかどうかが表示されるのってわかりやすくって便利。でも、フォローページの方には、相手がフォローしてくれているのかの情報は表示されません。
それを知るためには、わざわざ相手ページに移動してフォローされているのかをチェックするしかありません。
![画像3](https://assets.st-note.com/production/uploads/images/51083851/picture_pc_f728e81815e752d116dba9edc1dac5ae.png)
なんか、いい方法はないものかと記事を調べていたら、フォローバックされているかどうかの情報をいっぺんに取ってこれるAPIがあるっていう記事を見つけました。
フォロワーを取得するAPI(古バージョン)
https://note.com/api/v1/followings/licodeenar/list?page=1
/api/v1/ってなっているので、これ古いバージョンのAPIなのだと思うけれど、このAPIでフォロー情報を取得するとフォローバックの有無がわかるようです!?これだ!と意気揚々と試してみたのですが、どうやらこの機能はすでにOFFにされているっぽい。
実際にアクセスしてデータを覗いてみると、is_followerっていう項目だけは残っているけれど全て「false」の固定値が戻ってきてるように見えます。
期待が高まっただけに残念。
![画像1](https://assets.st-note.com/production/uploads/images/51051373/picture_pc_615a2beaa2c5c371cb97b5d1ac6ffed9.png)
今使われている /api/v2/ バージョンには、そもそもis_followerの項目自体がなくなっているので、おそらくパフォーマンスかなにかに課題があって実装をやめたのではないかと推測。。。
フォローバックのチェック機能をゴリゴリ実装
となると、フォローバックのチェック機能を実装するにはユーザのステータスをひとりずつアクセスしに行って取ってこないとってことですね。
ユーザのステータスを取得するAPI
https://note.com/api/v2/creators/licodeenar
地道にひとりずつチェックしていくしかなさそうです。。。
100人フォローしている人だと、100回チェックしにいかないといけないので、そこそこ情報取得には時間もかかってしまいそうです。
速度だけで考えたらもっと速くできそうですが、大量の不正アクセスと言われそうなので控えめに取りに行くようにしています。。。
そんなこんなで、できた!!
![画像6](https://assets.st-note.com/production/uploads/images/56538635/picture_pc_34c842c2de1b7e1cee83b92e4bbdcfba.png?width=1200)
フォローリストの右端にアイコンが付きます。
フォローされていれば緑のアイコン。されていなければグレーのアイコンが表示されます。
個人的に、この機能がほしかった!!
この情報はJSONでも取得が可能です。ボタン下の「JSON形式で表示する」のチェックボックスにチェックをしてください。
![画像5](https://assets.st-note.com/production/uploads/images/51085579/picture_pc_b10e34e2d48133e8fe6971b48c85a93c.png)
ユーザーごとにisFollowedという項目を追加していて「true = フォローされている」「false = フォローされていない」となってます。これで、Excelなどのデータに変換保存することも簡単にできると思います。
ID・パスワードは当ツールでは一切保存していません。ユーザステータス取得以外の目的でも使用していません。とはいえ、みなさんの大切な個人情報、、、万が一なにか起こっても責任とれませんので、、、ご利用の際は自己責任にてお願い致しますっ!
#ツール #noteで使えるツール #note_list_licodeenar