#目的・理由
・APIを使ってみたかった。
・本APIは登録など不要ですぐ使用可能だった。
・久しぶりにニコニコ動画を見たら楽しかった。
#参照リンク先
・APIのURL
※使い方などの詳細
・requestsとcurlコマンド
※curlコマンドをpythonのrequestsで実行
#コード
code
import requests
import json
import pandas as pd
#APIのエンドポイント
url = "https://api.search.nicovideo.jp/api/v2/snapshot/video/contents/search"
#検索結果をまとめる辞書(普段はリストでやりますがなんとなく辞書型でやってみた)
results = {}
#関数--------------------------------------------
def nico(year,start,end):
global results
#検索結果の取得可能な最大数は100件なので、日付期間で分けてデータを取得する
#(fromとtoで期間を指定)
filter = json.dumps(
{
"type": "or",
"filters": [
{
"type": "range",
"field": "startTime",
"from": f"{year}-{start}T00:00:00+09:00",
"to": f"{year}-{end}T00:00:00+09:00",
"include_lower": True
}
]
}
)
#qは検索キーワード、タグを検索対象とし、動画タイトルとタグを取得する
param = {
"q":"検索したい単語を入力、検索のORやAND条件などは本APIサイトを参照",
"targets":"tags",
"_sort":"-viewCounter",
"fields":"title,tags",
"_limit":100,
"jsonFilter":filter
}
#上記のfilterとparamsでAPIを使って検索実施
data = requests.get(url,params=param).json()["data"]
for i in data:
result= {i["title"]:i["tags"]}
results.update(result)
#----------------------------------------------
#実際に関数を使って、API検索開始
#日付の分け方は適当です、検索結果を見ながらお好みで調整
dates = {"01-01":"04-01","04-02":"07-01","07-01":"10-01","10-02":"12-31"}
years = range(2012,2023)
for y in years:
for d1,d2 in dates.items():
nico(y,d1,d2)
#結果件数の出力
print("件数は : " + str(len(results)))
#pandasを使ってデータ保存
df = pd.DataFrame(results.values(),index=results.keys())
df.to_excel("nico_api.xlsx")
#所感
・APIというかプログラミングでのデータ収集能力はやはり凄いと実感。(早い!)
・pythonのrequestsがcurlと同等というのを知った。
・curlコマンドを食わず嫌いしていたが、ちょっと親身に感じた。
・filterや検索結果の取得の際、jsonデータの勉強になった。
・なんだかんだでjsonデータ不慣れでしたのでいい勉強になりました。
・検索結果のタグを見てたらやっぱりタグの秀逸さには笑わせていただきました。
以上。