Mengambil Data TikTok dengan Python

Apa itu TikTok?

TikTok adalah sebuah aplikasi media sosial yang berbasis video yang telah merevolusi cara pengguna berbagi, menemukan, dan mengonsumsi konten secara global. Diluncurkan pada tahun 2016 oleh perusahaan teknologi asal Tiongkok, ByteDance, TikTok telah menjadi fenomena budaya dengan pertumbuhan pesat di seluruh dunia.

Dengan konsep awal yang sederhana namun inovatif, TikTok memungkinkan penggunanya untuk membuat dan membagikan video pendek dengan durasi 15 hingga 60 detik (sekarang sudah bisa lebih dari 60 detik). Aplikasi ini menawarkan berbagai fitur yang menarik, seperti efek visual, filter, musik latar, dan tantangan viral yang memungkinkan pengguna untuk mengekspresikan kreativitas mereka dengan cara yang unik.

Dalam beberapa tahun terakhir, TikTok telah mencapai popularitas yang luar biasa, terutama di kalangan pengguna usia muda. Aplikasi ini menjadi sumber hiburan yang tak terbatas dan juga menjadi platform bagi banyak kreator konten yang berbakat untuk berbagi karya mereka dengan jutaan orang di seluruh dunia.

Selain sebagai platform hiburan, TikTok juga menyediakan potensi besar dalam mengumpulkan dan menganalisis data. Setiap video yang diunggah oleh pengguna menyimpan berbagai informasi berharga seperti deskripsi, tagar (hashtag), jumlah like, jumlah komentar, dan banyak lagi. Data-data ini dapat diambil dan digunakan untuk berbagai tujuan, termasuk analisis tren, penelitian pasar, pengembangan strategi pemasaran, dan pemahaman lebih dalam tentang preferensi dan perilaku pengguna.

Dalam artikel ini, kita akan membahas langkah-langkah yang diperlukan untuk mengambil data TikTok menggunakan bahasa pemrograman Python tanpa API resmi dari TikTok. Di sini kita akan menggunakan library TikTokPy dan beberapa teknik pemrograman lainnya.

Mengambil Data TikTok

Prasyarat Instalasi

Semua langkah-langkah yang dijelaskan pada tutorial ini dijalankan pada sistem operasi Windows 11. Sebelum memulai, pastikan bahwa Python telah terpasang di komputer kalian. Selain itu, kalian juga perlu menginstal beberapa pustaka Python yang dibutuhkan yaitu pytz, aiofiles, tiktokapipy, dan playwright.

Kalian dapat menginstal pustaka-pustaka tersebut menggunakan pip. Buka terminal atau command prompt dan jalankan perintah berikut:

pip install tiktokapipy aiofiles pytz

Untuk menginstal playwright, buka terminal atau command prompt dan jalankan perintah berikut:

python -m playwright install

Jika perintah di atas tidak berjalan, coba ubah python dengan python3 atau py.

Mengimpor Pustaka Python

Setelah melakukan langkah sebelumnya, selanjutnya kita import dahulu pustaka yang diperlukan. Pada program ini, kita akan menggunakan asynchronous function. Jika kalian lebih suka synchronous function, kalian dapat memodifikasi semua kode yang ada pada tutorial ini dengan membaca dokumentasi pustaka tiktokpy di sini.

import asyncio
import csv
import time

import aiofiles
import pytz
from tiktokapipy.async_api import AsyncTikTokAPI

Jika kalian ingin menjalankan program ini di Jupyter Notebook pada sistem operasi Windows, saat ini pustaka tiktokpy belum bisa karena keterbatasan pada pustaka dependensinya. Jika kalian ingin memaksakan menjalankan program ini di Jupyter Notebook, program hanya akan berjalan pada sistem berbasis Linux dan kalian harus menambahkan dua baris kode berikut pada posisi paling atas dari kode kalian (sebelum import).

import nest_asyncio
nest_asyncio.apply()

Pastikan kalian juga sudah menginstal pustaka nest_asyncio. Sudah dites dengan Google Colaboratory dan berjalan dengan baik.

Membuat Fungsi untuk Menyimpan Data ke dalam CSV

Karena kita menggunakan asynchronous function, maka kita juga harus membuat asynchronous function untuk menyimpan data ke dalam csv. Di sinilah pustaka aiofiles diperlukan.

async def write_row_to_csv(filename, dct):
    async with aiofiles.open(filename, "a", newline="", encoding="utf-8") as f:
        writer = csv.DictWriter(f, fieldnames=dct.keys())
        await writer.writerow(dct)

Membuat Fungsi Mengambil Data dari TikTok

Di sini, kita hanya akan mengambil beberapa data dari semua data yang disediakan oleh tiktokpy. Untuk tahu lebih lengkap tentang tiktokpy, kalian bisa ke dokumentasinya di sini.

Pada fungsi ini, kita akan mengambil semua data video pada sebuah user. Setiap user pasti memiliki lebih dari atau sama dengan 0 video sehingga kita akan mengiterasi setiap video yang dimiliki oleh user. Setiap informasi yang berhasil didapatkan dari video akan langsung di simpan ke dalam csv.

async def get_data(username, filename):
    async with AsyncTikTokAPI(
        scroll_down_time=1,
        scroll_down_delay=0.1,
        scroll_down_iter_delay=0.1,
        navigation_retries=3,
        headless=False,
    ) as API:
        user = await API.user(username, video_limit=0)
        i = 1

        async for video in user.videos:
            dct = {}
            dct["no"] = i
            dct["video_id"] = video.id
            dct["like_count"] = video.stats.digg_count
            dct["share_count"] = video.stats.share_count
            dct["comment_count"] = video.stats.comment_count
            dct["view_count"] = video.stats.play_count
            dct["create_time"] = video.create_time.astimezone(
                pytz.timezone("Asia/Jakarta") 
            ).strftime("%Y-%m-%d %H:%M:%S") #Please change timezone to match yours
            dct["desc"] = video.desc
            dct["duration"] = video.video.duration
            dct["url"] = f"https://www.tiktok.com/@{username}/video/{video.id}"
            dct["engagement_rate"] = (
                (dct["like_count"] + dct["comment_count"] + dct["share_count"])
                / dct["view_count"]
                * 100
            )
            await write_row_to_csv(filename, dct)
            i += 1

    print(f"Success get {i-1} data.")

Pada kode di atas, kita hanya mengambil informasi berikut:

  • no : urutan video dari terbaru ke terlama
  • video_id : id dari sebuah video
  • like_count : jumlah like atau digg
  • share_count : jumlah share
  • comment_count : jumlah komentar
  • view_count : jumlah view atau play
  • create_time : waktu video diunggah, silakan ubah timezone sesuai daerah masing-masing
  • desc : deskripsi video
  • url : alamat url video
  • engagement_rate : metrik video yang mengukur interaksi penonton dengan video

$$\textrm{engagement rate}=\dfrac{\textrm{number of like} + \textrm{number of share} + \textrm{number of comment}}{\textrm{number of view}}\times 100$$

Saat ini terdapat bug jika kalian menggunakan parameter headless=True tidak bisa mendapatkan semua video (https://github.com/Russell-Newton/TikTokPy/issues/38).

Jika kalian masih belum bisa mendapatkan semua video, kalian bisa ubah parameter scroll_down_time menjadi lebih lama lagi dari 1 sekon. Pastikan scroll_down_time memberikan waktu yang cukup untuk program dapat melihat semua video yang dimiliki user agar bisa mendapatkan semua data videonya.

Menjalankan Program

Sebelum menjalankan program, kita harus menambahkan kode berikut ini di bawah fungsi get_data.

if __name__ == "__main__":
    username = "yudopr" #TikTok username without "@"
    filename = "data.csv" #Directory to save csv file
    fieldnames = [
        "no",
        "video_id",
        "like_count",
        "share_count",
        "comment_count",
        "view_count",
        "create_time",
        "desc",
        "duration",
        "url",
        "engagement_rate",
    ]

    with open(filename, "a", newline="") as f:
        writer = csv.DictWriter(f, fieldnames=fieldnames)
        if f.tell() == 0:
            writer.writeheader()

    start = time.time()
    asyncio.run(get_data(username, filename))
    end = time.time()
    print(f"Execution time: {round(end - start,2)}")

Pada kode di atas, kita menginisialisasi user yang ingin kita dapatkan data videonya dan lokasi penyimpanan file csv. Kita dapat mengganti variabel username sesuai user yang ingin dicari data videonya dan variabel filename untuk mengubah nama dan lokasi penyimpanan file csv.

Selanjutnya kita menulis header file csv dan terakhir memanggil fungsi get_data dengan asyncio.run karena dia merupakan asynchronous function. Kita juga menambahkan execution time untuk mengetahui program kita butuh berapa lama untuk mendapatkan data dari semua video suatu user.

Berikut ini contoh hasil file csv.

no video_id like_count share_count comment_count view_count create_time desc duration url engagement_rate
52 7005179217025518875 7 0 0 572 2021-09-07 20:13:06 #fyp #toyota #ae92 #corolla #twincam #gti 7 https://www.tiktok.com/@yudopr/video/7005179217025518875 1.2237762237762237
53 6965476624628305153 12 0 1 546 2021-05-23 20:26:48 Derita gak punya garasi atau carport… 8 https://www.tiktok.com/@yudopr/video/6965476624628305153 2.380952380952381
54 6959200138430532865 6 0 1 516 2021-05-06 22:30:50 11 https://www.tiktok.com/@yudopr/video/6959200138430532865 1.3565891472868217

Kesimpulan

Dengan mengikuti langkah-langkah pada tutorial ini, kita dapat mengambil data dari TikTok menggunakan Python. Kita dapat menggunakannya untuk analisis data, pembuatan dataset, atau tujuan lain sesuai kebutuhan kita.

Namun, perlu diingat bahwa ketika mengambil data dari TikTok, kita harus memperhatikan kebijakan privasi dan ketentuan penggunaan platform tersebut. Pastikan untuk memahami dan mematuhi aturan yang berlaku saat menggunakan data yang diambil dari TikTok.

Referensi

R. N. (2023, May 23). GitHub - Russell-Newton/TikTokPy: Extract data from TikTok without needing any login information or API keys. GitHub. https://github.com/Russell-Newton/TikTokPy.
Welcome to TikTokPy’s Documentation! - TikTokPy 0.1.13.post1 documentation. (n.d.). Welcome to TikTokPy’s Documentation! - TikTokPy 0.1.13.post1 Documentation. https://tiktokpy.readthedocs.io/en/latest/.