PythonでTikTokApiを用いてTikTokで最新のトレンドビデオを取得する

PythonでTikTokApiを用いてTikTokで最新のトレンドビデオを取得してみます。

今回はTikTokApiを用います。このライブラリは、Pythonの標準ライブラリではありませんので、事前にインストールする必要があります。

■Python

今回のPythonのバージョンは、「3.8.5」を使用しています。(Windows10)(pythonランチャーでの確認)

■TikTokApiを用いてTikTokで最新のトレンドビデオを取得する

では、早速TikTokApiを用いてTikTokで最新のトレンドビデオを取得するスクリプトを書いていきます。

■コード

from TikTokApi import TikTokApi

with TikTokApi() as api:
    for trending_video in api.trending.videos(count=10):
        print(trending_video)

今回は「from import」でTikTokApiのTikTokApiを呼び出します。その後、with構文を用いてTikTokApi()をapiをして操作できるようにします。その後for文を用いて、api.trending.videos()を用います。括弧内には引数,パラメータ(count=)として「10」を渡します。これでTikTokのトレンドの10件を取得することができます。取得できたものを順番にtrending_video変数に格納し、最後にprint()でtrending_video変数内の情報を出力します。

■実行と検証

今回はTikTokApiを「TikTok_Api」という仮想環境下でインストールしていますので、先程のスクリプトを「tik_data.py」という名前で保存し、仮想環境下に置きます。その後、Windows10のコマンドプロンプトを起動し、仮想環境に入ります。

(.venv) C:\Users\user_\TikTok_Api>python tik_data.py

入った後に上記のコマンドを入力し、Enterキーを押します。

Traceback (most recent call last):
  File "tik_data.py", line 3, in 
    with TikTokApi() as api:
  File "C:\Users\user_\TikTok_Api\.venv\lib\site-packages\TikTokApi\tiktok.py", line 159, in __init__
    self._initialize(
  File "C:\Users\user_\TikTok_Api\.venv\lib\site-packages\TikTokApi\tiktok.py", line 205, in _initialize
    self._browser = asyncio.get_event_loop().run_until_complete(
  File "C:\Program Files\Python38\lib\asyncio\base_events.py", line 616, in run_until_complete
    return future.result()
  File "C:\Users\user_\TikTok_Api\.venv\lib\site-packages\TikTokApi\browser_utilities\browser.py", line 76, in create
    self.browser = await self.playwright.webkit.launch(
  File "C:\Users\user_\TikTok_Api\.venv\lib\site-packages\playwright\async_api\_generated.py", line 11424, in launch
    await self._impl_obj.launch(
  File "C:\Users\user_\TikTok_Api\.venv\lib\site-packages\playwright\_impl\_browser_type.py", line 93, in launch
    Browser, from_channel(await self._channel.send("launch", params))
  File "C:\Users\user_\TikTok_Api\.venv\lib\site-packages\playwright\_impl\_connection.py", line 43, in send
    return await self._connection.wrap_api_call(
  File "C:\Users\user_\TikTok_Api\.venv\lib\site-packages\playwright\_impl\_connection.py", line 369, in wrap_api_call
    return await cb()
  File "C:\Users\user_\TikTok_Api\.venv\lib\site-packages\playwright\_impl\_connection.py", line 78, in inner_send
    result = next(iter(done)).result()
playwright._impl._api_types.Error: Executable doesn't exist at C:\Users\user_\AppData\Local\ms-playwright\webkit-1683\Playwright.exe
╔════════════════════════════════════════════════════════════╗
║ Looks like Playwright was just installed or updated.       ║
║ Please run the following command to download new browsers: ║
║                                                            ║
║     playwright install                                     ║
║                                                            ║
║ <3 Playwright Team                                         ║
╚════════════════════════════════════════════════════════════╝
Exception ignored in: 
Traceback (most recent call last):
  File "C:\Users\user_\TikTok_Api\.venv\lib\site-packages\TikTokApi\tiktok.py", line 421, in __del__
  File "C:\Users\user_\TikTok_Api\.venv\lib\site-packages\TikTokApi\tiktok.py", line 635, in shutdown
AttributeError: 'TikTokApi' object has no attribute '_browser'

実行してみると、「AttributeError: ‘TikTokApi’ object has no attribute ‘_browser’」というエラーが発生し、実行することができませんでした。実行できない原因を調べてみると、どうやらseleniumやchromedriverといったものがインストールされていないことが原因のようでした。

(.venv) C:\Users\user_\TikTok_Api>python -m playwright install

そこで上記のコマンドを入力し、Enterキーを押します。playwrightをインストールします。

Removing unused browser at C:\Users\user_\AppData\Local\ms-playwright\chromium-939194
Removing unused browser at C:\Users\user_\AppData\Local\ms-playwright\ffmpeg-1006
Downloading Chromium 104.0.5112.48 (playwright build v1015) - 106 Mb [====================] 100% 0.0s
Chromium 104.0.5112.48 (playwright build v1015) downloaded to C:\Users\user_\AppData\Local\ms-playwright\chromium-1015
Downloading FFMPEG playwright build v1007 - 1.4 Mb [====================] 100% 0.0s
FFMPEG playwright build v1007 downloaded to C:\Users\user_\AppData\Local\ms-playwright\ffmpeg-1007
Downloading Firefox 102.0 (playwright build v1335) - 76.5 Mb [====================] 100% 0.0s
Firefox 102.0 (playwright build v1335) downloaded to C:\Users\user_\AppData\Local\ms-playwright\firefox-1335
Downloading Webkit 16.0 (playwright build v1683) - 43.2 Mb [====================] 100% 0.0s
Webkit 16.0 (playwright build v1683) downloaded to C:\Users\user_\AppData\Local\ms-playwright\webkit-1683

Enterキーを押すと、Chromiumなどのインストールが開始され、しばらくすると完了します。

完了後、再度スクリプトを実行してみます。

実行してみますが、今回はエラーは出力されなかったものの何も出力されませんでした。この原因を調べてみると、Github(https://github.com/davidteather/TikTok-Api)で今回のTikTokApiライブラリを配布しているのですが、このライブラリと問題としてコードは何も返さないということがとりあげられていました(https://github.com/davidteather/TikTok-Api/issues/891)。

問題についての解決策としては、まずGoogleChromeの拡張機能である「CookieManager – Cookie Editor(https://chrome.google.com/webstore/detail/cookiemanager-cookie-edit/hdhngoamekjhmnpenphenpaiindoinpo)」をインストールします。

インストール後、GoogleChromeで「tiktok(https://www.tiktok.com/ja-JP/)」にアクセスします。アクセス後、tiktokにログインします。

ログイン後、「CookieManager – Cookie Editor」を起動させ表示されているすべてを選択し、「Export」ボタンをクリックします。クリックすると、Webブラウザで指定されている保存場所に「exported-cookies.json」というファイルが保存されます。

保存されたファイルをわかりやすいように今回は「C:\Users\user_\test(フォルダパス)」内に移動させます。なお、この「exported-cookies.json」内のキーである「name」と「value」は使用するので、事前に確認しておきます。

移動後(https://github.com/davidteather/TikTok-Api/issues/891)で提供されるコードをお借りします。

■コード

import json

def get_cookies_from_file():
    with open(r'C:\Users\user_\test\exported-cookies.json') as f:
        cookies = json.load(f)

    cookies_kv = {}
    for cookie in cookies:
        cookies_kv[cookie['name']] = cookie['value']

    return cookies_kv


cookies = get_cookies_from_file()


def get_cookies(**kwargs):
    return cookies

from TikTokApi import TikTokApi

api = TikTokApi()

api._get_cookies = get_cookies  

for trending_video in api.trending.videos(count=10):
    print(trending_video)

今回は、api.trending.videos()を用いて、Tik Tokのvideo IDを取得してみます。

お借りしたコードに、少し修正を加えて「tik_data.py」内に記述し保存します。なお「cookies_kv[cookie[‘name’]] = cookie[‘value’]」の部分は、「exported-cookies.json」内のキーを用います。

保存後、スクリプトを実行してみます。

実行してみると、今度はTik Tokのvideo IDを取得し出力させることができました。

コメント

タイトルとURLをコピーしました