Snippets
Created by
sironekotoro
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 | use strict;
use warnings;
use Data::Dumper; # リファレンス覗き用
use JSON qw/decode_json/
; # json形式のデータをPerlのデータ形式にする
use Encode qw/encode/
; # マルチバイト文字列(日本語)表示する
use LWP::Simple qw/get/; # インターネット上のデータを取得する
use utf8; # プログラム中に日本語を書く時に利用
# 参考
# Googleトレンドの急上昇キーワードをAPIで取得してみる
# https://wakabatimes.com/google%E3%83%88%E3%83%AC%E3%83%B3%E3%83%89%E3%81%AE%E6%80%A5%E4%B8%8A%E6%98%87%E3%82%AD%E3%83%BC%E3%83%AF%E3%83%BC%E3%83%89%E3%82%92api%E3%81%A7%E5%8F%96%E5%BE%97%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B
#
# The Fastest JSON visualizer
# http://kimihiro-n.site44.com/json_dump/index.html
# Googleトレンドを取得する日付を配列に入れる
my @date = ('20181231'); # 開始日
# 1月18日までの日付(yyyymmdd形式)を組み立てて配列に入れる
for my $day ( 1 .. 18 ) {
# sprintf関数で、$dayが1桁の時は左側に0が入る
# 1 => 01 と言うようになる
my $date = '201901' . sprintf( '%02d', $day );
push @date, $date;
}
my %date_query; # date をkeyとするデータ構造
my %query_date; # query をkeyとするデータ構造
for my $date (@date) {
# 日付をもとに、非公式APIのURLを1日ずつ組み立てる
my $uri = 'https://trends.google.com/trends/api/dailytrends?geo=JP&ed='
. $date;
# APIを叩いてresponseを得る
my $res = get($uri) or die;
# 行頭にあるゴミを除去する
# substr : 文字列の操作を行う関数
$res = substr( $res, 6 );
# json形式のデータをPerlのデータ構造に変換する
my $json = decode_json($res);
# クエリー(検索語)の配列を取得する
my @trendingSearches
= @{ $json->{default}->{trendingSearchesDays}->[0]->{trendingSearches}
};
# クエリー(検索語)を取り出して、%date_query を組み立てていく
while ( my ( $ranking, $body ) = each @trendingSearches ) {
# 検索ワード
my $query = $body->{title}->{query};
# ランキングとクエリー(検索語)をハッシュに格納する
my %entry = ( ranking => $ranking, query => $query );
# 格納したハッシュをリファレンスにして
# date_query->{日付} に追加していく
# (配列リファレンスに、ハッシュリファレンスを追加する)
push @{ $date_query{$date} }, \%entry;
# クエリー(検索語)と日付をkey、ランキングをvalueとするデータ構造を作る
$query_date{$query}{$date} = { ranking => $ranking };
}
}
# そのクエリー(検索語)の登場回数を記録する
for my $query ( sort keys %query_date ) {
# 登場回数の初期値:0
my $count = 0;
# クエリー(検索語)のvalueである登場した日付を取得する
for my $date ( sort { $a <=> $b } keys %{ $query_date{$query} } ) {
# 登場回数を+1
$count++;
# クエリー(検索語)の登場回数を日付ごとに count というkey に記録する
$query_date{$query}{$date}->{count} = $count;
# クエリー(検索語)登場した日付を配列リファレンスにpushする
push @{ $query_date{$query}{history} }, $date;
# (冗長だけど・・・)
# 配列リファレンスを配列に戻す。
my @history = @{ $query_date{$query}{history} };
# 配列の要素の数が1より大きい場合には、過去に出現したと判断
if ( scalar @history > 1 ) {
# 配列の添字を[−2]とすることで、末尾から2番目の要素
# (前回、クエリー(検索語)が出現した時の日付)を取得し、
# last_time というkeyに保存する
$query_date{$query}{$date}{last_time} = $history[-2];
}
}
}
# $date_query からから日付順に処理
# sort を利用して、順番を固定する
for my $date ( sort { $a <=> $b } keys %date_query ) {
# 見やすくするためのprint文
print "\n";
# 年月日をわかりやすくする
my $year = substr( $date, 0, 4 );
my $month = substr( $date, 4, 2 );
my $day = substr( $date, 6, 2 );
print encode( 'utf8', "-- ${year}年${month}月${day}日 --" ), "\n";
# $date_query{日付} は配列リファレンス。
# その日のクエリー(検索語)を順番に取り出す。
for my $entry ( @{ $date_query{$date} } ) {
# ランキングの順位を2桁にするために sprintf を使う
# ランキングは0始まりなので、 +1 して人間が読みやすく変換する。
my $ranking = sprintf( '%02d', $entry->{ranking} + 1 );
# クエリー(検索語)
my $query = $entry->{query};
# 前回出現した日付。ない場合には空文字 '' をセットする
my $last_time = $query_date{$query}{$date}->{last_time} // '';
# 前回出現した日付がある場合、それを表示する文字列を作成する
if ($last_time) {
# 前回出現時のランキングを取得
my $last_time_ranking = $query_date{$query}{$last_time}{ranking};
# 人間に合わせて +1 する。
$last_time_ranking += 1;
# 年月日をわかりやすくする
my $year = substr( $last_time, 0, 4 );
my $month = substr( $last_time, 4, 2 );
my $day = substr( $last_time, 6, 2 );
# 文字列の組み立て
$query = $query . "\t"
. "[前回出現:${year}年${month}月${day}日 ${last_time_ranking}位]";
}
# マルチバイト文字列(日本語)を表示するのでencodeする
my $encoded_str = encode( 'utf8', $query );
# printfで整形しつつ表示する
printf( "%02d %-20s \n", $ranking, $encoded_str ),;
}
}
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 |
-- 2018年12月31日 --
01 紅白歌合戦 2018
02 メイウェザー
03 米津玄師
04 紅白
05 泉里香
06 松任谷由実
07 内村光良
08 ニューイヤー駅伝 2019
09 今井翼
10 松田聖子
11 格付けチェック 2019
12 宮本浩次
13 米津玄師紅白
14 高橋メアリージュン
15 初日の出
16 大塚国際美術館
17 ジャニーズ
18 お雑煮
19 ハッピーニューイヤー
20 西野七瀬
-- 2019年01月01日 --
01 箱根駅伝
02 MHPS
03 マリウス
04 2019年運勢
05 TWICE
06 モンスト ソロモン
07 福袋
08 井上尚弥
09 初夢
10 FGO
11 純烈
12 ソロモン
13 あけましておめでとう
14 堂珍敦子
15 一般参賀 2019
16 福袋 2019
17 インディード Cm
18 イノシシ
19 深田恭子
20 紅閻魔
-- 2019年01月02日 --
01 箱根駅伝速報
02 東海大学
03 高校サッカー
04 宮沢りえ
05 下町ロケット
06 スポーツ王
07 ラウドラ
08 石原さとみ
09 アップル
10 内田理央
11 東洋大学
12 Amazon 初売り 2019
13 浜田雅功
14 紅白視聴率
15 山川穂高
16 大東文化大学
17 大迫傑
18 滝沢カレン
19 大学ラグビー
20 北陸新幹線
-- 2019年01月03日 --
01 地震
02 箱根駅伝 2019
03 アナと雪の女王
04 科捜研の女
05 永野芽郁
06 今田美桜
07 ドル円
08 荻野目洋子
09 しぶんぎ座流星群
10 菅田将暉
11 ライスボウル
12 バンドリ
13 太宰府天満宮
14 日テレ箱根駅伝
15 為替
16 九州
17 両角速
18 VS嵐
19 高橋真麻
20 後藤真希
-- 2019年01月04日 --
01 アバンティーズエイジ
02 風の谷のナウシカ
03 梅宮アンナ
04 岡崎紗絵
05 ブギーポップは笑わない
06 大泉洋
07 生田絵梨花
08 高校ラグビー
09 韓国レーダー照射
10 チコちゃん
11 ヴェルダンディ
12 前澤友作
13 エイジ死亡
14 いだてん
15 玉川徹
16 今泉佑唯
17 斎藤佑樹
18 レミゼラブルドラマ
19 安住紳一郎
20 YouTuber
-- 2019年01月05日 --
01 高校サッカー [前回出現:2019年01月02日 3位]
02 日食
03 JRA
04 七草粥
05 錦織圭
06 マグロ初競り
07 逃走中
08 坂本龍馬
09 名探偵コナン
10 春校バレーボール2019
11 春高バレー 2019
12 シンザン記念
13 HERO
14 長嶋一茂
15 高橋一生
16 ヒーロー
17 菊池雄星
18 とろサーモン久保田
19 大塚愛
20 剛力彩芽
-- 2019年01月06日 --
01 レミゼラブルドラマ [前回出現:2019年01月04日 18位]
02 永野芽郁 [前回出現:2019年01月03日 5位]
03 いだてん [前回出現:2019年01月04日 14位]
04 高橋メアリージュン [前回出現:2018年12月31日 14位]
05 菅田将暉 [前回出現:2019年01月03日 10位]
06 ジェジュン
07 前澤友作 [前回出現:2019年01月04日 12位]
08 サザエさん
09 高校ラグビー [前回出現:2019年01月04日 8位]
10 上白石萌歌
11 アジアカップ 2019
12 新千歳空港
13 七草がゆ
14 嘉納治五郎
15 森川葵
16 杉咲花
17 秩父
18 アジアカップ
19 柳田悠岐
20 春高バレー
-- 2019年01月07日 --
01 七草粥 [前回出現:2019年01月05日 4位]
02 長野久義
03 翻訳
04 トレース
05 神谷浩史
06 深田恭子 [前回出現:2019年01月01日 19位]
07 日経平均
08 どろろ
09 はじめてのおつかい
10 ゴールデングローブ賞 2019
11 吉沢亮
12 川栄李奈
13 ゾゾタウン社長
14 渡辺直美
15 ソフトバンク株価
16 本田翼
17 片寄涼太
18 ディーンフジオカ
19 日経平均株価
20 剛力彩芽 [前回出現:2019年01月05日 20位]
-- 2019年01月08日 --
01 西野カナ
02 吉田沙保里
03 日本 対 トルクメニスタン
04 地震 [前回出現:2019年01月03日 1位]
05 黒碧天
06 時効警察
07 李書文
08 高校ラグビー [前回出現:2019年01月06日 9位]
09 ゴーン
10 中澤佑二
11 矢沢心
12 ダルビッシュ
13 藤井聡太
14 テラスハウス
15 ぱすてるメモリーズ
16 ルーニー
17 GitHub
18 マクレガー
-- 2019年01月09日 --
01 山口真帆
02 友井雄亮
03 トルクメニスタン
04 尾田栄一郎
05 サッカー日本代表
06 兼高かおる
07 サッカーアジアカップ
08 家売る女
09 アジアカップ [前回出現:2019年01月06日 18位]
10 NGT
11 馬毛島
12 志村けん
13 ピーチジョン
14 バーチャルさんは見ている
15 りんご病
16 玉川徹 [前回出現:2019年01月04日 15位]
17 摂津正
18 武田玲奈
-- 2019年01月10日 --
01 純烈 [前回出現:2019年01月01日 11位]
02 雨宮萌果
03 日本 対 トルクメニスタン [前回出現:2019年01月08日 3位]
04 ワンピース
05 スキャンダル専門弁護士
06 盾の勇者の成り上がり
07 楠ろあ
08 福男
09 星座
10 刑事ゼロ
11 宇賀なつみ
12 京王観光
13 川谷絵音
14 森川葵 [前回出現:2019年01月06日 15位]
15 松本人志
16 竹下亘
17 はあちゅう
18 ディビジョン
-- 2019年01月11日 --
01 耳をすませば
02 純烈 [前回出現:2019年01月10日 1位]
03 太野彩香
04 戸松遥
05 メゾンドポリス
06 約束のネバーランド
07 鏡開き
08 高橋一生 [前回出現:2019年01月05日 15位]
09 Shiho
10 ヴァニラ
11 ジョンベネ
12 キャッツアイ
13 五等分の花嫁
14 武田真治
15 えなこ
16 東京オートサロン 2019
17 吉田鋼太郎
18 ガーリーエアフォース
19 仮面ライダーギルス
20 上白石萌音
-- 2019年01月12日 --
01 天地総子
02 須田亜香里
03 ドメスティックな彼女
04 Chara
05 電気グルーヴ
06 小嶋真子
07 フルーツ宅配便
08 テレビ番組
09 青森山田
10 東京天気
11 LiLiCo
12 滝藤賢一
13 デートアライブ
-- 2019年01月13日 --
01 オマーン 対 日本
02 高校サッカー決勝
03 中井りか
04 成人式
05 稀勢の里
06 都道府県駅伝 2019 女子
07 ハリースタイルズ
08 河村隆一
09 かぐや様は告らせたい
10 全国女子駅伝
11 グッドワイフ
12 ヒカル
13 オマーン
14 荻野由佳
15 日本代表
16 坂口健太郎
17 生駒里奈
18 青森山田サッカー
19 流通経済大学柏サッカー
20 金蘭会
-- 2019年01月14日 --
01 地震 [前回出現:2019年01月08日 4位]
02 市川海老蔵
03 バーミヤン
04 アジアカップ 2019 [前回出現:2019年01月06日 11位]
05 全豪オープン
06 宮田聡子
07 稀勢の里 引退
08 川口春奈
09 サッカー
10 アジアカップ [前回出現:2019年01月09日 9位]
11 川栄李奈 [前回出現:2019年01月07日 12位]
12 梅原猛
13 長澤まさみ
14 家政婦は見た
15 荒野のコトブキ飛行隊
16 平野レミ
17 南野拓実
18 成人の日
-- 2019年01月15日 --
01 初めて恋をした日に読む話ドラマ
02 稀勢の里 [前回出現:2019年01月13日 5位]
03 スープラ
04 横浜流星
05 錦織圭 [前回出現:2019年01月05日 5位]
06 阪神淡路大震災
07 竹田恒和
08 けものフレンズ2
09 大坂なおみ
10 木村拓哉
11 アインシュタイン
12 転生したらスライムだった件 15話
13 レアード
14 伊藤綾子
-- 2019年01月16日 --
01 純烈 [前回出現:2019年01月11日 2位]
02 Fear and Loathing in Las Vegas
03 芥川賞
04 スタバ
05 宮根誠司
06 工藤静香
07 安達祐実
08 サマソニ
09 水川あさみ
10 竹内結子
11 ニューシャトル
12 ローランド
13 黒木華
14 ちぃたん
15 坂口健太郎 [前回出現:2019年01月13日 16位]
16 指原莉乃
17 初めて恋をした日に読む話漫画
18 きせのさと
19 田子の浦親方
20 NANAMI
-- 2019年01月17日 --
01 ゴチ新メンバー 2019
02 バンクシー
03 口永良部島
04 日本 対 ウズベキスタン
05 錦織圭 [前回出現:2019年01月15日 5位]
06 シベール
07 阪神淡路大震災 [前回出現:2019年01月15日 6位]
08 モンスト 海坊主
09 三浦大知
10 剛力彩芽 [前回出現:2019年01月07日 20位]
11 千鳥ノブ
12 ウズベキスタン
13 サザコーヒー
14 中村倫也
15 エースコンバット7
16 サブウェイ
17 大坂なおみ [前回出現:2019年01月15日 9位]
18 ハマオカモト
19 モンスト 冴羽リョウ
20 志田未来
-- 2019年01月18日 --
01 佐野瑞樹
02 センター試験 2019
03 地震 [前回出現:2019年01月14日 1位]
04 羽賀研二
05 モンスト キャッツアイ
06 センター試験
07 僕の初恋を君に捧ぐドラマ
08 サッカーアジアカップ [前回出現:2019年01月09日 7位]
09 マスカレード・ホテル
10 バックストリートボーイズ
11 トクサツガガガ
12 サッカー日本代表 [前回出現:2019年01月09日 5位]
13 キンタロー
14 クロちゃん
15 サッカー [前回出現:2019年01月14日 9位]
16 ロペス
17 三宅健
18 刀剣乱舞映画
19 シュミットダニエル
20 塩谷司
|
Comments (0)
You can clone a snippet to your computer for local editing. Learn more.