Snippets

sironekotoro Googleトレンドを非公式APIから取得し、各日のランキングをとり、以前に出現してたらその日と順位も表示する

Created by sironekotoro

File google_trand.pl Added

  • Ignore whitespace
  • Hide word diff
+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 ),;
+    }
+}

File result.txt Added

  • Ignore whitespace
  • Hide word diff
+
+-- 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 塩谷司            
HTTPS SSH

You can clone a snippet to your computer for local editing. Learn more.