4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Search: list で複数チャンネルを一発で検索する

Last updated at Posted at 2019-06-14

#結論
検索クエリ q に"チャンネル名"***(NOT チャンネルID)***を' OR 'でつないだやつをぶち込む。

ここでわかった人、知ってた人は帰って良し!

私にとってはブレイクスルーだったので記事にすることにしました。

以下、具体例。
#今までやってたこと

search.py
#チャンネル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_IDq = ' OR '.join(CHANNEL_ID)と変更しmaxResultを目的のコンテンツが引っかかるように指定します。

まず、チャンネルIDではなく、Channels: listsnippet.titleなどでわかる正確なチャンネル名をダブルクォーテーションで囲ったやつ"チャンネル名"のリストを作成します。
これを' OR '.join(CHANNEL_NAMES)のように OR (前後にスペース)でつなげたやつを検索クエリに投げます。そうすると目的のものを含んだデータが返ってくると思います。
このデータを、目的のコンテンツをifなどでチャンネルIDでフィルタリングして利用します。

これで1回の検索でたくさん検索できます。
※チャンネル名をOR接続したやつの合計文字数が多くなりすぎると、後半が検索漏れすることがあるのでそういうときは分けましょう。私の推しでは、6チャンネルはいけました。

あたかも、上を書き換えれば動くように書いてますがeventTypeorderと共存できませんでしたなんでぇ……

この方法、ほとんど上手く行くのですがチャンネルIDに二連続のダッシュ—-が入っていると検索結果がバグります。これの解決方法があったらよろしくお願いします。 そもそもIDを使わなくなりました。
###実装例

search.py
#チャンネル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

4
1
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?