たなしょのメモ

日々勉強していることをつらつらと

youtube検索くんをつくる2日目

サンプルコードを動かしたい

昨日詰まっていたapiキーの取得方法を見つけた。

qiita.com

キーワード検索はできた。

月ノ美兎「それゆけ!学級委員長」MV
【#帰れない百物語】100個怖い話するまで帰れない2020【月ノ美兎/にじさんじ】
★初心者歓迎★月ノ美兎ちゃん限定なりきりチャット★Free Chat★
月ノ美兎・爆誕SP2020【ヨーロッパ企画実況・Wiki閲覧・凸待ち】
輪!Moon!dass!cry! / coverd by JK組(月ノ美兎・樋口楓・静凛)
【#にじ宇宙人狼】疑い合い、はじめました【Among US/月ノ美兎】
【クイズにじオネア】最初からいた奴が解けないわけなくない!?【にじさんじ/月ノ美兎】
「夢で見た月ノ美兎」の目撃情報をお伝えします
10分で分かる月ノ美兎【にじさんじ公式】
【にじさんじ】フェミノ美兎まとめ【月ノ美兎】
月ノ美兎の夢を見たいリスナーが狂気すぎるwwww【にじさんじ/切り抜き】
【マイクラ肝試し2020】 JK組・屋台お廻り編【にじさんじ / 月ノ美兎視点】
【新髪型お披露目】念願のポニーテール!!!!【にじさんじ/月ノ美兎】
【マイクラ肝試し2020…?】 JK組タイムスリップで肝試し編【にじさんじ / 月ノ美兎視点】
つきのみと没カット集
【マイクラ肝試し2020】 JK組・肝試し編【にじさんじ / 月ノ美兎視点】
【キャラリレー】月ノ美兎、声真似生主への第一歩【Fall Guys】
月ノ美兎の百物語史上最も怖かった話
一期生でご飯行った話、かえみとに挟まる?ハジキ[にじさんじ切り抜き/樋口楓/月ノ美兎/静凛/渋谷ハジメ/勇気ちひろ/モイラ様/鈴谷アキ/える]
にじさんじオーディションの思い出を語る月ノ美兎
次元を超えてくる月ノ美兎っぽい人
(#にじ宇宙人狼)で無双する椎名唯華【にじさんじ/夜見れな/不破湊/本間ひまわり/月ノ美兎】
シャニマスのSSRアニメ演出に大興奮する月ノ美兎【にじさんじ切り抜き/月ノ美兎】
チュルリラ・チュルリラ・ダッダッダ!/和田たけあき(くらげP) coverd by 月ノ美兎

ちなみにソースコードはこんな感じになった。

#!/usr/bin/python

from apiclient.discovery import build
from apiclient.errors import HttpError
from oauth2client.tools import argparser

DEVELOPER_KEY = "API_KEY"
YOUTUBE_API_SERVICE_NAME = "youtube"
YOUTUBE_API_VERSION = "v3"

def youtube_search(options):
    youtube = build(
        YOUTUBE_API_SERVICE_NAME,
        YOUTUBE_API_VERSION,
        developerKey=DEVELOPER_KEY
    )

    search_response = youtube.search().list(
        q=options.q,
        part="id,snippet",
        maxResults=options.max_results
    ).execute()

    videos = []

    for search_result in search_response.get("items", []):
        if search_result["id"]["kind"] == "youtube#video":
            videos.append("%s" % search_result["snippet"]["title"])

    for data in videos:
        print(data)


if __name__ == "__main__":
    argparser.add_argument("--q", help="Search term", default="月ノ美兎")
    argparser.add_argument("--max-results", help="Max results", default=25)
    args = argparser.parse_args()

    try:
        youtube_search(args)
    except HttpError as e:
        print("An HTTP error %d occurred:¥n%s" % (e.resp.status, e.content))

チャンネルID指定もできるみたい。
検索処理

search_response = youtube.search().list(
        # q=options.q,
        channelId=options.channel_id,
        part="id,snippet",
        maxResults=options.max_results,

    ).execute()

channelIDパラメータ

# channelIDパラメータ
argparser.add_argument("--channel-id", help="Channel ID", default="UCCzUftO8KOVkV4wQG1vkUvg")

youtubeのurlを仕様を理解できたのでvideoIdと組み合わせるとこんなかんじ。

【マインクラフト】👹ホロ鯖わからせ鬼ごっこinハロウィン洋館👹【ホロライブ/宝鐘マリン】->(https://www.youtube.com/watch?v=QX8qG9qWKfc)
【はいしんよてい💘】【ホロライブ/宝鐘マリン】->(https://www.youtube.com/watch?v=LQontk074pY)
【パスパルトゥー】ゲーム内で描いた絵が売れる💰神絵師の真価が試される・・・🖌【ホロライブ/宝鐘マリン】->(https://www.youtube.com/watch?v=7HGA-3Z3YMo)
【東方紅魔郷EX】🔥フランちゃんを倒しつつ雑談できるのか?🔥(できない)【ホロライブ/宝鐘マリン】->(https://www.youtube.com/watch?v=Ja6emp5Y9NY)
【パスパルトゥー】一発書きイラスト得意ウーマン❣今回はハッピーエンドを目指す✨【ホロライブ/宝鐘マリン】->(https://www.youtube.com/watch?v=K8i8VDL9o48)
【#ホロファン座談会】5人でマシュマロいただくぜw【ホロライブ三期生】->(https://www.youtube.com/watch?v=5hAK7ZwLhew)
【Keep Talking and Nobody Explodes】ぺこマリ探偵団、爆弾解除の謎!【ホロライブ/宝鐘マリン/兎田ぺこら】->(https://www.youtube.com/watch?v=YX5GcFjkDSo)
【絵と雑談】7月突入!!7月といえばぁ~~~?!?!【ホロライブ/宝鐘マリン】->(https://www.youtube.com/watch?v=qRY7Yj2cv0I)

検索ロジック

    for search_result in search_response.get("items", []):
        if search_result["id"]["kind"] == "youtube#video":
            videos_titles.append("%s->(https://www.youtube.com/watch?v=%s)" % (search_result["snippet"]["title"], search_result["id"]["videoId"]))

ある程度操作がわかってきたので簡易的なツールでも作ってみようと思う。
作業用bgmとしてcitypopを聞くのが好きなのでcitypopプレイリストもどきでも作ろうと思う。

検索パラメータ

# 検索パラメータ
argparser.add_argument("--q", help="Search term", default="CITYPOP")

タイトルとurlを取得してデータフレームに追加する。

    for search_result in search_response.get("items", []):
        if search_result["id"]["kind"] == "youtube#video":
            videos_titles.append("%s" % search_result["snippet"]["title"])
            videos_url.append("https://www.youtube.com/watch?v=%s" % search_result["id"]["videoId"])

    df = pd.DataFrame(index=[], columns=[])

    df["title"] = videos_titles
    df["url"] = videos_url

データフレーム内のtitleとurlを引っ張りfor文で回してwebbrowser.openでブラウザを開く。

    for title, url in zip(df['title'], df['url']):
        print(test_color.Color.PURPLE + ("Now Playing is [%s] ♫♫" % title) + test_color.Color.END)
        webbrowser.open(url, new=1)
        print(test_color.Color.RED + ("Press enter to listen to the next song!") + test_color.Color.END)
        get_key = input()

不格好ではあるがこれで形にはなった。