TikTok-Api icon indicating copy to clipboard operation
TikTok-Api copied to clipboard

Download video failed

Open cg00003 opened this issue 1 year ago • 8 comments

async for video in tag.videos(count=10): video_id = video.id video_bytes = api.video(id=video_id).bytes() file_name = video_id + ".mp4" with open(file_name, "wb") as out: out.write(video_bytes)

Abnormal information: TypeError: a bytes-like object is required, not 'coroutine'

cg00003 avatar Dec 11 '23 10:12 cg00003

You should use:

await video.bytes()

At this moment, the function, unfortunately, is not implemented

BoolmanO avatar Dec 15 '23 16:12 BoolmanO

Do you have any solution to download Tiktok video? @BoolmanO

sonnguyenhong avatar Jan 04 '24 17:01 sonnguyenhong

Do you find any solution?@sonnguyenhong

smoltsbohdan avatar Jan 23 '24 10:01 smoltsbohdan

Same request here. Method to download video is not implemented, so please consider this issue

Chdlopezes avatar Feb 02 '24 19:02 Chdlopezes

Have you guys found a solution to download videos from Tiktok automatically? Does such an API exist?

Coronal-Halo avatar Feb 20 '24 16:02 Coronal-Halo

Did you find any solution in order to download tiktok videos?

juanls1 avatar Apr 01 '24 13:04 juanls1

IN THE CASE THAT IT BITES YOU TO INSTALL LIBRARIES LIKE PANDAS OR SOME OTHER LIBRARY, JUST INSTALL

Repository Repository

I had to install this (latest)

pip install browser_cookie3
pip install pandas

``I found the solution to the problem, I had the same errors but making some modifications and changing the type and the way in which I obtained the videos, I modified:

add two variables

        user = api.user(username)
        videos = user.videos()

change the for to iterate over the videos found in the account and then another variable


        async for video in videos:
            print(f"Username: {video.author.username}")
            print(f"Video ID: {video.id}")
            print(f"Stats: {video.stats}")

            video_url = f"https://www.tiktok.com/@{username}/video/{video.id}"

sincerely I do not know what differences there are with the other method (speaking of the variable video_url) but well it works and then I leave as this the part that downloads the video from YoutubeDL

and at the end of the code add the variable username in which will start the code that is the user that we want to download the videos, I clarify that this will download all the videos of the user from top to bottom.

if __name__ == "__main__":
    username = 'username'
    asyncio.run(download_user_videos(username))

and regarding the token, honestly I did not use the ms_token and I do not know what it is for hahahahahah xd but the token that worked for me was the "multi_sids" that is the domain tiktok.com SPECIFICALLY THAT one

code complete:

from TikTokApi import TikTokApi
from yt_dlp import YoutubeDL
import asyncio
import os

ms_token = os.environ.get("multi_sids", None) 
ydl_opts = {
    'outtmpl': '%(uploader)s_%(id)s_%(timestamp)s.%(ext)s',
}

async def download_user_videos(username):
    async with TikTokApi() as api:
        await api.create_sessions(ms_tokens=[ms_token], num_sessions=1, sleep_after=3, 
                                  headless=False, suppress_resource_load_types=["image", "media", "font", "stylesheet"])

        user = api.user(username)
        videos = user.videos()

        async for video in videos:
            print(f"Username: {video.author.username}")
            print(f"Video ID: {video.id}")
            print(f"Stats: {video.stats}")

            video_url = f"https://www.tiktok.com/@{username}/video/{video.id}"
            with YoutubeDL(ydl_opts) as ydl:
                ydl.download([video_url])

if __name__ == "__main__":
    username = 'username'
    asyncio.run(download_user_videos(username))

I clarify that the verisions of the libraries I am using are:

Name: TikTokApi
Version: 6.3.0
Name: yt-dlp
Version: 2024.5.27

VMASPAD avatar Jun 20 '24 15:06 VMASPAD

With this library you can download TIkTok videos in mp4 format: https://github.com/dfreelon/pyktok

tomasruizt avatar Jul 10 '24 09:07 tomasruizt