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を取得し出力させることができました。
コメント