LoginSignup
20
32

More than 5 years have passed since last update.

自作Python - Youtube検索プログラム

Last updated at Posted at 2017-03-30

requestsとBeautifulsoup4だけを使ったシンプルな検索です。

使いかた

Y = Youtube([query], result=[num])

queryは検索単語です。日本語対応。
numは検索結果数です。ページネーションの関係で現時点で最大20。ここら辺は各自でいじってくだしあ。

Y.url    >> 検索結果のurlリスト
Y.title  >> タイトルリスト
Y.id     >> IDリスト(ID?っていうの?JaDJbrwi0gkみたいな固有番号)
Y.embed  >> 貼り付け用urlリスト
Y.time   >> 再生時間リスト(需要ないかも)

例)
print(Youtube("アンジャッシュ",result=5).url)

>> ['https://www.youtube.com/watch?v=JaDJbrwi0gk', 'https://www.youtube.com/watch?v=yGPAyqxrado', 'https://www.youtube.com/watch?v=tGl2Dp1v0gw', 'https://www.youtube.com/watch?v=myp35PyYk1A', 'https://www.youtube.com/watch?v=Tt1rkp3h1pM', 'https://www.youtube.com/watch?v=XIJqsqOCorw']
Y.select() >> 検索結果から1つ選択し、上記の情報について辞書を返します。
key = "url","title","id","embed","time"

例)
movie = Y.select()
print(movie["url"]) >> https://www.youtube.com/watch?v=JaDJbrwi0gk

他のダウンロードAPIとかと組み合わせると効率いいかも。

スクリプト

import requests
from bs4 import BeautifulSoup

class Youtube():
    def __init__(self,query,result=10): # max20まで
        search_url = "https://www.youtube.com/results?search_query=" + query
        req = requests.get(search_url)
        soup = BeautifulSoup(req.text.encode(req.encoding).decode('utf-8','strict'),"html5lib")
        h3s = soup.find_all("h3", {"class":"yt-lockup-title"})[0:result+1]

        self.data = [h3 for h3 in h3s]
        self.url = ["https://www.youtube.com" + h3.a.get('href') for h3 in h3s]
        self.title = [h3.a.get("title") for h3 in h3s]
        self.id = [h3.a.get("href").split("=")[-1] for h3 in h3s]
        self.embed = ["https://www.youtube.com/embed/" + h3.a.get("href").split("=")[-1] for h3 in h3s]
        self.time = [h3.span.text.replace(" - 長さ: ","").replace("。","") for h3 in h3s]
        self.info = [h3.text for h3 in h3s] # >>タイトル - 長さ:00:00。

    def select(self):
        values = {"url":self.url,"title":self.title,"id":self.id,"embed":self.embed,"time":self.time}
        info = self.info
        for i in range(len(info)):
            print("%s:%s" % (i,info[i]))
        while True:
            try:
                num = int(input("番号:"))
                break
            except:
                print("番号を正しく入力してください。")
        results = {
            "url":values["url"][num],
            "title":values["title"][num],
            "id":values["id"][num],
            "embed":values["embed"][num],
            "time":values["time"][num],
            }
        return results

if __name__ == '__main__':
    Y = Youtube(input("検索ワード:"),result=5)
    movie = Y.select()
    print(movie["url"])

20
32
8

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
20
32