見出し画像

おともだちの更新状況をチェックしたい

ひさびさに、ツールを作って遊んでました。今日は新しいツールの紹介です。noteをはじめてそろそろ5年にもなると、昔仲の良かったあのnoterさんはいまごろどうしているのだろうとか、最近音沙汰ないな、なんて方がちらほら(いや結構)でてきます。記事が突然更新されたりすると、なんだか安心したりしてww

以前から、自分がフォローしているnoterさんの記事の最終更新が一覧でみれたらいいな、と思っておりまして、年末のお休みを前にコツコツ作っておりました。こちらもWebツールとして公開しようと思います。使って遊んでみてください!w

フォロー中のユーザ情報をもってきて、記事の最新更新日順に並び替えます。改めて並べてみると気づきがあるかと思います。やっぱりnote辞めちゃったのかなぁ?とか、あれ?復活してる?とか、更新頻度下がってるかなとか、簡単な診断ができますw

チェックボタンをクリックするとこんな感じでリスト表示します。

最終更新日が、3年前とか。。。流石にもう辞めちゃったのかな。

表示方式はnoteっぽく、◯年前、◯ヶ月前、◯時間前のように表示してみました。ついでに、アイコン画像も持ってきてnote風に表示してます。

扱えるMAX数は500人までの制限いれてます。フォローが500人以上いる場合も使えますが超過したユーザ分は無視されます。




ここからは、恒例の自己満足&備忘記事ですので、テキトーに読み飛ばしてくださいませ。

noteには様々な情報をJSON形式で取ってくるAPIが用意されてまして、これを解析することで色々な形に情報を整形し直して出力することができるようになります。

今回使ったAPIは主に次の3つ。

//①ユーザ情報を取得する
https://note.com/api/v2/creators/{ユーザID}

//②フォロー中のユーザリストを取得する
https://note.com/api/v2/creators/{ユーザID}/followings?per=20&page={ページ数}

//③各ユーザの記事情報を取得する
https://note.com/api/v2/creators/{ユーザID}/contents?kind=note&page=1&per=1&disabled_pinned=true&with_notes=false

①で自分自身のユーザ情報を取得して、そこから得られた情報を元に②フォローユーザのリストを持ってきます。更に、フォローユーザのリストを元に③各ユーザの最新の記事情報を取得するというようなことを中でやっています。

②フォロー中のユーザリストを取得する

https://note.com/api/v2/creators/{ユーザID}/followings?per=20&page={ページ数}

②がなかなかの曲者で、難儀したのが「退会ユーザ」の扱い。noteを退会するとすぐに参照できなくなるのですが、APIで取得したデータにはしばらくの間(たぶん数日間)この退会済みユーザが残るんですね。。。おそらくデータ削除時のパフォーマンスの問題で意図的にそのような仕様にしているのかと思われます。そのため、APIにはユーザ情報があるのに参照しようとするとエラーになる、みたいなことが起こります。

withdrawal: true

これを回避するために②で取得したデータの中に、withdrawalっていう項目があって、これがtrueになっているものが退会ユーザということらしい。データが完全に削除されるまでの数日間はこの項目をみて処理を分けるとよさそうです。

ついでに、もうひとつのハマりポイントが、このAPIでは {ページ数} が指定できて、1ページ毎にMAX20人分のリストが取得できます。なんですが、このページ数が50ページより先が取得できない仕様になっていて、、、フォーローしているユーザが(50ページ x 20人)1000人を超える情報が取得できない。

パフォーマンスだったり、note側への負荷も考慮して、今回のツールではMAX取得人数を500人までにして制限をかけているのでどのみち大きな影響はないはず。ただ、過去のユーザほど更新状況が知りたいはずなので、フォローした日が古い順に500人取ってくるっていう機能をわざわざ組み込んだんですね。ところがこのnoteの仕様上、フォローページの50ページより古い情報は取ってこれないので、1000人以上フォローしているユーザはフォーローページの「50ページ目で折り返し」て500人取得するっていう中途半端実装になってしまった。

③ユーザの記事情報を取得する

https://note.com/api/v2/creators/{ユーザID}/contents?kind=note&page=1&per=1&disabled_pinned=true&with_notes=false

ユーザの最新の記事情報をひとつだけ取り出すAPI。これを元に最新記事の更新日時を取得しています。

ハマりポイントというわけではないですが、何も考えずに最上位の記事を取得するとピン留めされた記事が返ってきます。そこで、APIのリクエスト用パラメータにdisabled_pinned=trueを指定してあげます。するとピン留めされた記事を無視して最新の記事が取れます。

disabled_pinned=true

ChatGPT

改めて今回の功労はChatGPTですね。。。

指示をちゃんとしないと、おかしな返答を返すこともありますが、それにしてもですよ。ちょっとわからないコードは、リファレンスなんか参照せずに手っ取り早く、こんなことがしたい、とつぶやくと、リファレンスどころか、コードを生成してくれる。

特に今回変更したWebページのデザイン部分なんかは、ほぼChatGPTさんに頼りっぱなし。アイコン画像を丸くくり抜きたいんだけどみたくつぶやくと、すぐに教えてくれます。


その他のツールもここにまとめているので、どうぞ。



この記事が気に入ったらサポートをしてみませんか?