0
0

More than 1 year has passed since last update.

#プログラミング #Javascript #nodejs # #twitter の #推しNHKドラマを3つ貼る見た人もやる を集計

Last updated at Posted at 2022-08-20

本内容を利用した場合の一切の責任を私は負いません。

概要

7月末にNHKが下記のtweetをしたのでAPIを使って集計してみた。
https://twitter.com/NHK_DVD/status/1553228894316023808

image.png

バージョン

・node-v10.16.0-win-x64
・needle@3.1.0
・columns Version: 2.2.2

集計ルール

・NHKのtweetの日以前に作成されたユーザーのtweetが対象
 (=新しいユーザーは除外。)
・1アカウントの最新のタグ有りtweetのみ対象
 (=複数の場合は最新のみ。)
・タグの直前直後の空行を除く3行を、1行当たり20文字分
 直前直後は直前が優先で、直前が無いか空行のみの場合のみ直後を採用する。
・#等記号と空白を無視
 #等記号は、
 ・#
 ・「」
 ・『』
 ・「・」
 ・①②③
 ・✓
 ・📺
 ・'
 ・"
 ・’
 ・”
 ・!
 ・!
・主なカテゴリー名を無視
 主なカテゴリは、
 ・連続テレビ小説
 ・海外ドラマ
 ・大河ドラマ
 ・銀河テレビ小説

リポジトリ

主なファイルは、
・nhk_drama_totalling.js
 本体。
・totalling_result_top1000.csv
 集計結果。
・nhk_drama.csv
 カテゴリ名が含まれていると集計精度が落ちる。
 どんなカテゴリーがあるか下記を解析して確認した。
 https://www2.nhk.or.jp/archives/search/index.cgi?type=index&genre=drama&subgenre=0&year=all&view=0#page=1
 解析時に取得したデータ。

使用

node.jsでnhk_drama_totalling.jsを動かし、ブラウザからlocalhost:8081にアクセスする。
twitter APIの認証はBearerを使用してるので、twitterの開発者ページで発行し、「token」環境変数に設定しておく。
そうすると、nhk_drama_totalling.js#L24の下記で使用される。
const token = process.env.token;
実行は1リクエストごとに停まるようなブレークポイントをかけること。
停めないとAPIのRateを超えて途中で止まることになると思う。
(下記のAPIのページにRateが載っている。)

備考

自分のtwitterリストチェッカー( https://qiita.com/qiita21409102/items/b1acef8b270b502838aa )を流用した上に、APIの使用回数上限により何度も実行できないため、全く精査されていないソースになった。
ただ、個人情報を除いて、動作実績のあるものが良いと思ったので、このまま挙げた。

50件取得で215リクエストなので該当tweetは10750程あったもよう。
ちなみにAPIでは100件取得までできる。
何故100件にしないかというと、needleライブラリの受信バッファがどうやら0.7MBくらいしかないっぽい。
レスポンスが正常終了なのにデータが中途になっている。
(HTTPのレスポンスのcompleteを見るとfalseになっているのでわかる。)
twitter APIは厳密には下記のSandboxのlast30dayを使った。
https://developer.twitter.com/en/docs/twitter-api/premium/search-api/overview
本当のPremiumは有料。
Standardサーチは直近7日(自分の動作実績では10日)しか取得できない。
V2APIのRecentも7日で、FullはAcademic用。
https://developer.twitter.com/en/docs/twitter-api/tweets/search/api-reference

集計結果はJSONをWeb表にするjqueryライブラリの下記を使った。
[columns]
https://github.com/eisenbraun/columns

上記のtwitterリストチェッカーで使っていたtwitterライブラリはBearerに対応していないようだったので、今回は下記のneedleを使った。
[needle]
https://github.com/tomas/needle
上記のストリームの説明に「from 0.7+」とあるのは0.7MB制限のことかも。
実働もそのくらいの大きさで中途になる。
ただ、ストリーム等のメソッドはクエリーをオブジェクトで渡せず、URL指定になる。
自分がやった時はURL指定ではうまく動作しなかった。

※追記(2022/08/21)
最初に考えた集計方法は違った。
tweetが主ではなく、NHKのサイト解析で得たドラマリストが主。
これをtweetにマッチングしていって票を集める。
ただ、これだとリストが2500くらいあり、かなり時間がかかると思ったため。
けど、この方法なら不要な語句のことを考える必要もないし、集計精度は高い。
この集計方法が先にあったため、リストを取得した。
というか、解析でリストが取得できたから、集計してみようと思った。
ちなみにリストは管理情報的なものもあるらしく、放送日が載っていないものもあるので、まず、リストを精査する必要があるとは思う。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0