#結論
検索クエリ q に"チャンネル名"***(NOT チャンネルID)***を' OR 'でつないだやつをぶち込む。
ここでわかった人、知ってた人は帰って良し!
私にとってはブレイクスルーだったので記事にすることにしました。
以下、具体例。
#今までやってたこと
#チャンネルIDのリスト
channel_id = ['UCxxx', 'UCxxx', 'UCxxx']
#おまじない
youtube = build(YOUTUBE_API_SERVICE_NAME, YOUTUBE_API_VERSION, developerKey=DEVELOPER_KEY)
#検索部分
def youtube_search(CHANNEL_ID):
search_response = youtube.search().list(
part = 'id, snippet',
type = 'video',
eventType = 'live',
maxResults = 1,
channelId = CHANNEL_ID
).execute()
#実行
for ID in channel_id:
youtube_search(ID)
※基本的な定義部分とfieldsは省いてます
上のようにチャンネルIDのリストを作り、ループさせていました。
これだと検索したいチャンネルの数だけquotaが食われるのでやばいです。私は18チャンネル分繰り返していて一日五回までの必殺技みたいになってました。
#解決策
まず、channelId = CHANNEL_ID
を q = ' OR '.join(CHANNEL_ID)
と変更しmaxResult
を目的のコンテンツが引っかかるように指定します。
まず、チャンネルIDではなく、Channels: listのsnippet.title
などでわかる正確なチャンネル名をダブルクォーテーションで囲ったやつ"チャンネル名"
のリストを作成します。
これを' OR '.join(CHANNEL_NAMES)
のように OR (前後にスペース)でつなげたやつを検索クエリに投げます。そうすると目的のものを含んだデータが返ってくると思います。
このデータを、目的のコンテンツをif
などでチャンネルIDでフィルタリングして利用します。
これで1回の検索でたくさん検索できます。
※チャンネル名をOR接続したやつの合計文字数が多くなりすぎると、後半が検索漏れすることがあるのでそういうときは分けましょう。私の推しでは、6チャンネルはいけました。
あたかも、上を書き換えれば動くように書いてますがeventType
やorder
と共存できませんでしたなんでぇ……
この方法、ほとんど上手く行くのですがチャンネルIDに二連続のダッシュ そもそもIDを使わなくなりました。—-
が入っていると検索結果がバグります。これの解決方法があったらよろしくお願いします。
###実装例
#チャンネルIDのリスト
channel_names = ['xxxChannel', 'xxxチャンネル', 'xxxちゃん寝る']
#おまじない
youtube = build(YOUTUBE_API_SERVICE_NAME, YOUTUBE_API_VERSION, developerKey=DEVELOPER_KEY)
#検索部分
def youtube_search(CHANNEL_NAMES):
search_response = youtube.search().list(
part = 'id, snippet',
type = 'video',
eventType = 'live',
maxResults = 50,
q = ' OR '.join(CHANNEL_NAMES)
).execute()
#実行
youtube_search(channel_names)
##雑記
以上、初投稿でした。お見苦しい点等ありましたら言ってください。
この解決法を見つけたきっかけは単なる思い付きで、「ブラウザ検索欄にチャンネルID貼り付けたらどうなる?いけるじゃん……じゃあORで繋いだら……じゃあAPIでも……」って感じでした。結局、チャンネル名でしたが......
閃きって大切だなあって思いました(小並感)
チャンネルIDで検索する方法も場合によっては有効だと思いますが、私はeventType = 'live'
が欲しかったのでこちらを採用しました。
検索対象の人が必ずオリジナルのタグとかつけていればそれを検索してもいけるのかな?とか思ったり。
大幅な修正申し訳ございません。私の確認不足でした......
##リンク
Search: list