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




コメント