TwitterのJSONからURLを頻度順に抜き出すスクリプト

目的

収集したTwitterの投稿データに含まれるURLの出現頻度とそれらの順位を知りたかった。 statuses/*_timelineやsearch/tweetsのエンドポイントで取得したデータを想定とする。

スクリプト

find . -name "*.json" | xargs cat \ 
 | jq -r '.entities | if .urls == null then empty else .urls[].expanded_url end' \
 | awk '{c[$0]++}END{for(i in c)print c[i], i}' \
 | sort -k1 -n -r | head -n5

1行目は単純に*.jsonを検索して次に渡して、2行目はjqを使ってurlのvalueを取得、3行目はurlのカウント、4行目は頻度順にソートしてトップ5を表示。 media以下のURLを対象とするには、「.urls」と「.urls」の部分を「.media」と「.media」に置き換えればOK。

前提

  • jqがインストールされている
  • 1ポストが1ファイルとなったhoge.jsonが入力

Twitterの投稿データに含まれるURLの扱い

Twitterの投稿データに含まれるURLに関するデータはおおよそ以下の通りとなる。「media」はTwitter標準のメディア投稿機能(画像とか動画とか)を利用した場合に専用のスキーマに格納されるらしい?(参考: Entities — Twitter Developers

  • entities
    • media

      • media_url
      • media_url_https
      • url
      • display_url
      • expanded_url
    • urls

      • url
      • display_url
      • expanded_url

media_urlとmedia_url_httpsは画像ファイルが配置されているパスだが、今回はメディア表示ページのパスを使うことにしたので除外、 また、display_urlはクライアントでの表示用に「...」で省略された形式(http://hoge.com/fuga...)であるので除外。

urlはTwitterの標準機能の短縮URL「t.co」で短縮されたデータで、expanded_urlはその短縮URLが展開された形式なので、今回の用途にはexpanded_urlを抽出すれば良さそうという結論に至った。(展開されるのはあくまでも「t.co」で、外部の短縮URLサービスを利用したURLは展開されない)

福島土産~2017年正月~

福島の土産

今回のお土産は完全に酒を飲むためのラインナップになった。

日本酒色々

f:id:ekranoplan94:20170101121012j:plain:w500

金水晶 純米吟醸(金水晶酒造店:福島市
自然郷 純米吟醸 初しぼり無濾過(大木大吉本店:矢吹町
  • 日本酒を買った店でお店の人と他の人が話しているのを横で聞いていた時に話に上がっていたので買ってみた。
奥の松 特別純米 新米新酒初しぼり(奥の松酒造:二本松市
奥の松 純米大吟醸(奥の松酒造:二本松市
  • 奥の松は学生時代に初めて日本酒を美味しいと思えたお酒で思い入れがある。ある時、アパート近くのスーパーで買って飲んだ時に、あ、美味しい、日本酒もいけるじゃん。となった事を覚えている。その後は結構なんでも行けるようになった。

イカ切り込み本仕込み とんびのみ

f:id:ekranoplan94:20170101121141j:plain:w400 イカ切り込み本仕込み とんびのみ | 美味いもん 相馬本家

安い塩辛なんかはそれはそれで良いのだけれど味が強すぎて、日本酒でそれを打ち消すような飲み方は良くないなあと思っていた。これは味わえる塩辛というか、塩辛だけど塩辛さがそこまでない。ちなみに、イカのとんび(口)だけを使っている。

あんこうの肝和え

f:id:ekranoplan94:20170101121134j:plain:w400 あんこうの肝和え | 美味いもん 相馬本家

あんこうの身やら皮やら肝やらを味噌で和えたもの。こっちも味噌の味がそこまで強くないので美味しいのだけれど逆にどんどん食べてしまう。