كشط وتنزيل معلومات مفيدة من Tiktok.
هذا ليس دعم API الرسمي وما إلى ذلك
سمات
للقيام
مساهمة
تثبيت
الاستخدام
طُرق
خيارات
استخدام مع الوعود
استخدام مع الأحداث
كيفية الحصول على/تعيين قيمة الجلسة
كيفية الوصول/تنزيل الفيديو
مثال الإخراج
طرق تغذية الفيديو
getUserProfileInfo
Gethashtaginfo
getVideometa
getMusicinfo
يبني
يجري
أمثلة طرفية
إدارة سجل التنزيل
كشط وتنزيل في دفعة
مثال ملف الإخراج
في المحطة
عامل ميناء
الوحدة النمطية
اعتبارًا من الآن ، لا يمكن تنزيل الفيديو بدون العلامة المائية
قم بتنزيل بيانات التعريف غير المحدودة من المستخدم أو علامة التجزئة أو الاتجاهات أو الموسيقية
احفظ البيانات الوصفية بعد ملفات JSON/CSV
قم بتنزيل الوسائط مع وبدون العلامة المائية وحفظها على ملف ZIP
قم بتنزيل فيديو واحد بدون علامة مائية من CLI
تسجيل URL لتقديم طلب مخصص إلى API Tiktok
استخراج البيانات الوصفية من المستخدم وعلم الهاشتاج والفيديو المفرد
احفظ التقدم السابق وقم بتنزيل مقاطع فيديو جديدة فقط لم يتم تنزيلها من قبل . تعمل هذه الميزة فقط من CLI وفقط إذا كانت علامة التنزيل قيد التشغيل.
عرض وإدارة تاريخ المنشورات التي تم تنزيلها مسبقًا في CLI
كشط وتنزيل المستخدم ، علامة التجزئة ، خلاصات الموسيقى ومقاطع الفيديو الفردية المحددة في الملف في وضع الدُفعات
CLI: حفظ التقدم لتجنب تنزيل نفس مقاطع الفيديو
أعد كتابة كل شيء في TypeScript
تحسين دعم الوكيل
إضافة الاختبارات
قم بتنزيل الفيديو بدون العلامة المائية
تشير في ملف الإخراج (CSV/JSON) إذا تم تنزيل الفيديو أم لا
البناء والركض من Docker
CLI: كشط وتنزيل في دفعة
CLI: تحميل وكلاء من ملف
CLI: ZIP اختياري
تجديد API
تعيين عنوان URL Webhook (CLI)
أضف طريقة جديدة لجمع بيانات التعريف الموسيقية
أضف ترقيم ترميم يدوي
تحسين الوثائق
قم بتنزيل ملفات الصوت
واجهة الويب
لا تنس الاختبارات
اختبار الغزل
بناء الغزل
يتطلب Tiktok-Scraper node.js v10+ للتشغيل.
تثبيت من NPM
npm i -g tiktok -scraper
تثبيت من الغزل
الغزل العالمي إضافة tiktok-scraper
$ tiktok-scraper-help الاستخدام: Tiktok-Scraper <Comment> [Options] الأوامر: مستخدم Tiktok-Scraper [معرف] أشرطة الفيديو من اسم المستخدم. أدخل اسم المستخدم فقط tiktok-scraper hashtag [id] screpoos من علامة التجزئة. أدخل علامة التصنيف بدون # Tiktok-Scraper Trend Scrape Posts من الاتجاهات الحالية Tiktok-Scraper Music [ID] منشورات من رقم معرف الموسيقى Tiktok-Scraper Video [ID] قم بتنزيل فيديو واحد بدون علامة مائية Tiktok-Scraper History عرض تاريخ التنزيل السابق Tiktok-Scraper من الملف [ملف] [Async] مستخدمين الكشافة ، علامات التجزئة ، الموسيقى ، مقاطع الفيديو المذكورة في ملف. 1 قيمة لكل سطر خيارات: -رقم إصدار العرض [منطقي] -مجموعة ملفات تعريف ارتباط جلسة الجلسة. في بعض الأحيان يمكن أن تكون الجلسة مفيد عند تجريد البيانات من أي طريقة [افتراضي: ""] -SETESS SET PATH إلى الملف مع قائمة الجلسات النشطة. واحد جلسة لكل سطر! [تقصير: ""] -قم بتعيين المهلة بين الطلبات. المهلة بالميلي ثانية: 1000 مل = 1 ثانية [الافتراضي: 0] -رقم ، -عدد المنشورات لكشط. إذا قمت بتعيين 0 ثم الكل سيتم كشط المشاركات [افتراضي: 0] -Since Scrape لا منشورات تم نشرها قبل هذا التاريخ (الطابع الزمني). إذا تم تعيينه على 0 ، يتم إلغاء إلغاء إلغاء الفلتر [الافتراضي: 0] -proxy ، -P تعيين وكيل واحد [افتراضي: ""] -ملف proxy استخدام الوكلاء من ملف. سوف يستخدم مكشطة الوكلاء العشوائيين من الملف لكل طلب. 1 الخط 1 وكيل. [تقصير: ""] -تنزيل ، -قم بتنزيل منشورات الفيديو إلى المجلد مع إدخال الاسم [ID] [Boolean] [افتراضي: خطأ] -asyncdownload ، -عدد من التنزيلات المتزامنة [الافتراضي: 5] -تنزيل فيديو HD في HD. سيكون حجم الفيديو X5-X10 مرات أكبر وسيؤثر ذلك على سرعة تنفيذ المكشطة. هذا الخيار يعمل فقط مع علم -W [منطقي] [افتراضي: خطأ] -zip ، -z zip جميع منشورات الفيديو التي تم تنزيلها [منطقية] [افتراضي: خطأ] -مسار ملف filepath لحفظ جميع ملفات الإخراج. [افتراضي: "/users/karl.wint/documents/projects/javaScript/tiktok-scraper"] - -filetype ، -t نوع ملف الإخراج حيث ستكون المعلومات النشر أنقذ. "الكل" -احفظ معلومات حول جميع المنشورات إلى "Json" و "CSV" [الخيارات: "CSV" ، "Json" ، "All" ، "] [افتراضي:" "] -Filename ، -F Set اسم الملف المخصص لملفات الإخراج [افتراضي: ""] -Nowatermark ، -W قم بتنزيل الفيديو بدون علامة مائية. ملاحظة: مع التحديث الأخير ، تحتاج فقط إلى استخدام هذا الخيار إذا كنت تقوم بتغذية التجزئة. سيحتوي خلاصات المستخدم/الاتجاه/الموسيقى على عنوان URL افتراضيًا [Boolean] [افتراضي: خطأ] -سيحفظ مكشطة -S ، [Boolean] [افتراضي: false] -تعيين مسار مخصص للمجموعة حيث سيتم تخزين ملف/ملفات السجل [افتراضي: "/var/bolders/d5/fyh1_f2926q7c65g7skc0qh80000gn/t"] -remove ، -r سجل التاريخ عن طريق الإدخال "النوع: إدخال" أو "الكل" لتنظيف كل التاريخ. على سبيل المثال: المستخدم: BOB [افتراضي: ""] -WebHookurl تعيين عنوان URL WebHook لتلقي نتيجة مكشطة كطلبات HTTP. على سبيل المثال إلى واجهة برمجة التطبيقات الخاصة بك [افتراضي: ""] -تلقي البيانات إلى عنوان URL الخاص بك على الويب كنشر أو الحصول على طلب [خيارات: "GET" ، "Post"] [افتراضي: "post"] -Help Show Help [ Boolean] أمثلة: Tiktok -scraper user username -d -n 100 -SED_TT -SESSION Dae32131231 Tiktok -Scraper Music_ID -D -N 50 -SED_TT SID_TT = DAE32131231 TIKTOK -SCRAPER VIDEO : Bob Tiktok-Scraper History -r All Tiktok-Scraper من FATCH_FILE ASYNC_TASKS -D
أمثلة طرفية
إدارة سجل التنزيل
كشط وتنزيل في دفعة
باستخدام Docker ، لن تتمكن من استخدام -filepath و - -historypath ، ولكن يمكنك ضبط مستوى الصوت ( مسار المضيف حيث سيتم حفظ جميع الملفات ) باستخدام -V
بناء Docker. -T Tiktok-Scraper
مثال 1: سيتم حفظ جميع الملفات بما في ذلك ملف السجل في الدليل ($ PWD) حيث تقوم بتشغيل Docker من
Docker Run -V $ (PWD):/usr/app/files tiktok -scraper user tiktok -d -n 5 -s
مثال 2: سيتم حفظ جميع الملفات بما في ذلك ملف السجل في/مستخدم/بلاه/التنزيلات
Docker Run -V/user/blah/تنزيل:/usr/app/files tiktok -scraper user tiktok -d -n 5 -s
.user (ID ، خيارات) // منشورات كشط من مستخدم معين (وعد) .hashtag (معرف ، خيارات) // منشورات الكشف عن علامة التجزئة (الوعد) القسم (وعد) .Music (معرف ، خيارات) // منشورات screap بواسطة معرف الموسيقى (وعد) .userevent (معرف ، خيارات) من قسم الهاشتاج (الحدث) .Trendevent ('' ، الخيارات) // screeps من قسم الاتجاهات (الحدث) .musicevent (id ، الخيارات). ) // احصل على معلومات ملف تعريف المستخدم. معلومات التعريف ، بما في ذلك url الفيديو بدون watermark.getmusicinfo ('https://www.tiktok.com/music/original-sound-680188549343571718'
Const Options = {// عدد المنشورات إلى Screape: {int default: 20} الرقم: 50 ، // screap المنشورات المنشورة منذ هذا التاريخ: {int default: 0} منذ: 0 ، // set session: {string [] افتراضي: ['']} // مطلوب قيمة ملفات تعريف الارتباط للجلسة المصادقة لتكشيف خلاصة المستخدم/trending/music/hashtag // يمكنك وضع أي عدد من الجلسات ، سيقوم كل طلب بتحديد جلسة عشوائية من قائمة listsession raild: ['sid_tt = 21312213 '] ، // set proxy {string [] | السلسلة الافتراضية: ''} // http proxy: 127.0.0.1:8080// socks proxy: قم بتنفيذ requestsproxy: '' ، // تعيين إلى {true} للبحث عن طريق معرف المستخدم: {boolean الافتراضي: false} by_user_id: false ، // ما هو عدد المنشور الذي يجب تنزيله بشكل غير متزامن. فقط إذا كان {download: true}: {int default: 5} asyncdownload: 5 ، // ما هو عدد المنشورات التي يجب أن يتم كشطها بشكل غير متزامن: {int default: 3} // سيتم تطبيق الخيار الحالي فقط مع الأنواع الحالية: الموسيقى والعلاج / مع أنواع أخرى ، يكون الأمر دائمًا 1 لأن كل استجابة طلب إلى API Tiktok توفر قيمة "maxcursor" // المطلوبة لإرسال requestAsyncScraping التالي: 3 ، // مسار الملف حيث سيتم حفظ جميع الملفات: {String string string : 'current_dir'} filepath: `current_dir` ، // اسم الملف المخصص لملفات الإخراج: {String افتراضي: ''} اسم الملف:` current_dir` ، // الإخراج بالمعلومات يمكن حفظه في ملفات csv أو json: { السلسلة الافتراضية: 'na'} // 'csv' للحفظ في csv // 'json' للحفظ في json // 'All "للحفظ في JSON و CSV //' na 'لتخطي هذا stepfiletype:` na` ، // قم بتعيين رؤوس مخصصة: عامل المستخدم ، ملف تعريف الارتباط و " وتنزيل الفيديو من خلال القيمة المستلمة {videourl} تحتاج إلى استخدام نفس الرؤوس: {'user-agent': "blah" ، المرد: 'https://www.tiktok.com/'cookie: `tt_webid_v2 = 68dssds` ، : false} // لن يعمل هذا الخيار فقط إذا تم تعيين {nowatermark} على {true} hdvideo: false ، // يتم استخدام VerifyFP للتحقق من الطلب وتجنب captcha // عندما تستخدم الوكيل ثم هناك فرص عالية سيتم حظره // مع captcha // يمكنك تعيين قيمة VerifyFP الخاصة بك أو الافتراضي (المتشددين) سيتم استخدامها لاستخدام Tiktok Test Endpoints.usetestendpoints: false} ؛
لا تنس التحقق من مجلد الأمثلة
const tiktokscraper = require ('tiktok-scraper') ؛ // خلاصة المستخدم بواسطة اسم المستخدم (async () => {try {const posts = await tiktokscraper.user ('username' ، {number: 100 ، sessionlist: 58BA9E34431774703D3C34E60D584475 ؛ ']}) ؛ console.log (المشاركات) ؛ ، تحتاج إلى تمرير معرف المستخدم كسلسلة (async () => {try {const posts = eark tiktokscraper.user (`user_id` ، {number: 100 ، by_user_id: true ، sessionlist: }) ؛ console.log (posts) ؛} catch (خطأ) {console.log (خطأ) ؛}}) () ؛ // trending feed (async () => {try {const posts = await tiktokscraper.trend ( '' ، {number: 100 ، sessionlist: ['' SID_TT = 58BA9E34431774703D3C34E60D58475 ؛ ']}) ؛ console.log (posts) ؛} catch (error) {console.log (error) ؛}}) () ؛ FEED (async () => {try {const posts = await tiktokscraper.hashtag ('hashtag' ، {number: 100 ، SessionList: ['sid_tt = 58ba9e3443174703d3c34e60d58475 ؛']}}) ؛ خطأ) {console.log (خطأ) ؛}}) () ؛ // احصل على معلومات ملف تعريف المستخدم الفردي: عدد المتابعين وما إلى ذلك المستخدم = ينتظر tiktokscraper.getUserProfileInfo ('اسم المستخدم' ، الخيارات) ؛ console.log (user) ؛} catch (خطأ) {console.log (خطأ) ؛}}) () ؛ // الحصول و etc // input - خيارات hashtag // خيارات - غير مطلوب (async () => {try {const hashtag = await tiktokscraper.gethashtaginfo ('hashtag' ، الخيارات) ؛ console.log (hashtag) ؛} catch (خطأ) {console.log (error) ؛}}) () ؛ // احصل على بيانات تعريف فيديو واحدة // إدخال - web_video_url // على سبيل المثال: https://www.tiktok.com/@tiktok/video/68074919848484827650622///// غير مطلوب (async () => {try {const videometa = await tiktokscraper.getVideometa ('https://www.tiktok.com/@tiktok/video/680749198882762062' ، خي) ؛ (خطأ) {console.log (خطأ) ؛}}) () ؛
const tiktokscraper = require ('tiktok-scraper') ؛ const users = tiktokscraper.userevent ("tiktok" ، {number: 30}) ؛ user.on ('data' ، json => {// data in json format}) ؛ user.on ('done' ، () => {//Completed )) ؛ ercers.on('error '، error => {// message}) ؛ user.scrape () ؛ const hashtag = tiktokscraper. علامة التجزئة ("Summer" ، {Number: 250 ، Proxy: 'Socks5: //1.1.1.1: 90'}) ؛ hashtag.on ('data' ، json => {// data in json format}) ؛ hashtag. ON ('DONE' ، () => {//COMPLETED )) ؛HashTag.on('Error '، error => {// message}) ؛ hashtag.scrape () ؛
غير مطلوب
مشكلة شائعة جدًا هي عندما تقوم Tiktok بإدراج السوائل السوداء في IP/Proxy ، وفي مثل هذه الحالة ، يمكنك محاولة تعيين الجلسة وستكون هناك فرص أعلى للنجاح
احصل على الجلسة:
افتح https://www.tiktok.com/ في أي متصفح
قم بتسجيل الدخول إلى حسابك
انقر بزر الماوس الأيمن -> المفتش -> الشبكات
صفحة التحديث -> حدد أي طلب تم تقديمه إلى Tiktok -> انتقل إلى أقسام رأس الطلب -> ملفات تعريف الارتباط
البحث في ملفات تعريف الارتباط SID_TT . عادة ما يبدو ذلك: SID_TT = 521KKADKASDASKDJ4J213J12J312 ؛
SID_TT = 521KKADKASDASKDJ4J213J12J312 ؛ - ستكون هذه قيمة ملفات تعريف ارتباط الجلسة المصادقة التي يجب استخدامها لتكشيف المستخدم/التجزئة/الخلاصة
اضبط الجلسة:
CLI :
مثال على المحتوى/var/bob/sessionlist.txt:
تعيين جلسة واحدة باستخدام الخيار -الجلسة . على سبيل المثال -SESSED SID_TT = 521KKADKASDASKDJ4J213J12J312 ؛
قم بتعيين المسار إلى الملف مع قائمة الجلسات باستخدام الخيار -ملف الجلسة . على سبيل المثال -زملاء/زمام
sid_tt=521kkadkasdaskdj4j213j12j312; sid_tt=521kkadkasdaskdj4j213j12j312; sid_tt=521kkadkasdaskdj4j213j12j312; sid_tt=521kkadkasdaskdj4j213j12j312;
في الوحدة النمطية ، يمكنك تعيين الجلسة عن طريق تعيين قائمة Sessional Value. على سبيل المثال ، قائمة الجلسة: ["SID_TT = 521KKADKASDASKDJ4J213J12J312 ؛" ، "SID_TT = 12312312312312 ؛"]
يرتبط هذا الجزء باستخدام الوحدة النمطية (وليس CLI)
قيمة {videourl} مضطربة إلى قيمة ملفات تعريف الارتباط {tt_webid_v2} التي يمكن أن تحتوي على أي قيمة
عندما تقوم باستخراج مقاطع الفيديو من المستخدم أو علامة التجزئة أو الموسيقى أو التغذية المتجهة أو الفيديو المفرد ، فستستجيبًا إلى جانب بيانات تعريف الفيديو ، ستتلقى كائن رؤوس سيحتوي على معلمات تم استخدامها لاستخراج البيانات. فيما يلي الجزء المهم ، من أجل الوصول إلى/تنزيل الفيديو من خلال {videourl} القيمة التي تحتاجها لاستخدام نفس قيم {Headers} .
الرؤوس: {"user-agent": "Mozilla/5.0 (Macintosh ؛ Intel Mac OS X 10_15_5) AppleWebkit/537.36 (KHTML ، مثل Gecko) Chrome/86.0.4240.80 Safari/537.36" ، "المرجع:" HTTPS: // // // // www.tiktok.com/"cookie ":" tt_webid_v2 = 68985414108686123 "} ،
يمكنك تمرير رؤوسك باستخدام {Options} .
const headers = {"user-agent": "bob" ، "referer": ) user ('web_video_url' ، {headers}) hashtag ('web_video_url' ، {headers}) trend ('web_video_url' ، {headers}) music ('web_video_url' ، {headers}) {videourl} القيمة باستخدام نفس الرؤوس المخصصة
مثال على الإخراج للطرق: المستخدم ، الهاشتاج ، الاتجاه ، الموسيقى ، userevent ، علامة التجزئة ، Musicevent ، Trendevent
{رؤوس: {'user-agent': 'mozilla/5.0 (macintosh ؛ intel mac os x 10_15_5) AppleWebkit/537.36 (khtml ، مثل gecko) chrome/86.0.4240.80 Safari/537.36' ، المرجع: https: // www .tiktok.com/'، ملف تعريف الارتباط: "اسم المستخدم" ، التالي: 195 ، المشجعين: 43500 ، القلب: "1093998" ، فيديو: 3 ، Digg: 95 ، تم التحقق منه: خطأ ، خاص: خطأ ، توقيع: "المستخدم Bio" ، Avatar: 'Avatar_url'} ، musicmeta: {MusicId: '68080981113188120838' ، musicname: 'blah blah' ، musicauthor: 'blah' ، musicoriginal: true ، playurl: 'sound/music_url' ،} ، cover: : 'cover_url'} ، imageurl: 'image_url' ، videourl: 'video_url' ، videourlnowatermark: 'video_url_without_the_watermark' ، videoMeta: 1 ، PlayCount: 9007 ، CommentCount: 50 ، يذكر: ['bob' ، 'sam' ،'bob_again '،'@@sam_again '] ، علامات التجزئة: [{id:' 69573911 '، الاسم: "playwithlife" ، العنوان: 'hashtag_title' ، الغلاف: [Array]} ...] ، تم تنزيله: true} ...] ، // if {fileType} و {download} خيارات معمل ثم: zip: '/{current_path}/user_15529635810944 .zip '، json:'/{current_path )/user_1552963581094.json'،csv: '/{current_path )/user_1552963581094.csv'}
{secuid: 'ms4wljabaaaav7isuuxdjgdvjkmh_vz1qkdzyo1apxgzaxdbsebseiupim' ، userid: '107955' ، issecret: false ، فريدة من نوعها: 'tiktok' ، nogname: 'tiktok ، "] ، فيما يلي: 490 ، المشجعين: 38040567 ، القلب:" 211522962 "، الفيديو: 93 ، التحقق: صواب ، Digg: 29 ،}
{التحدي: "4231" ، تحدي: "الحب" ، النص: "، الأغطية: [] ، CoversMedium: [] ، المنشورات: 66904972 ، وجهات النظر:" 194557706433 "، IsCommerce: false ، splittitle: '}
{رؤوس: {'user-agent': 'mozilla/5.0 (macintosh ؛ intel mac os x 10_15_5) AppleWebkit/537.36 (khtml ، مثل gecko) chrome/86.0.4240.80 Safari/537.36' ، المرجع: https: // www .tiktok.com/'، ملف تعريف الارتباط:' tt_webid_v2 = 68985414108686123 '} ، جامع: [{id:' 6807491984882765062 '، النص: "نبدأ في سلسلة البث المباشر #Happyathome اليوم في 5pm pt! 1584992742 '، Authormeta: {id:' 6812221792183403526 '، الاسم:' blah '} ، musicmeta: {musicid:' 6822233276137213677 '، musicname:' blah ' video_url '، videourlnowatermark:' video_url_without_the_watermark '، videometa: {width: 480 ، الارتفاع: 864 ، النسبة: 14 ، المدة: 14} ، الأغطية: {default:' cover_url ' : 339 ، playcount: 614678 ، CommentCount: 4023 ، تم تنزيله: false ، علامات التجزئة: [] ،}]}
{Music: {id: '6882925279036066566' ، العنوان: 'doja x calabria' ، playurl: 'dfdfdfdf' ، coverthumb: 'dfdfdf' ، covermedium: 'dfdfdf' ، coverlarge: 'fdfdf' صحيح ، playtoken: 'ffdfdf' ، keytoken: 'dfdfdfd' ، audiourlwithcookie: false ، private: false ، المدة: 46 ، الألبوم: '' ،} ، المؤلف: {id: '68353004094166021' ، فريدة من نوعها: "mashupsbryce "برايس" ، الصورة الرمزية: "dfdfd" ، Avatarmedium: 'Dfdfdf' ، avatarlarger: 'dfdfdf' ، التوقيع: DZ5JZEXTO0OZOYBQIWWHW5TAG_IM25LKO94DM3K '، secret: false ، ftc: false ، العلاقة: 0 ، OpenFavorite: false ، التعليقات: 0 ، dietsetting: 0 ، StitchSetting: 0 ، privateaccount: false ،} ، الإحصائيات: {videoCount: 361700} ، marhemeta: {title:' Bryceyouloser | ♬ Doja x Calabria | على Tiktok '، DESC:' 361.0K Videos - شاهد مقاطع فيديو Awesome Short ' +' التي تم إنشاؤها باستخدام ♬ doja x calabria '،} ،} ؛
رخصة
معهد ماساتشوستس للتكنولوجيا
برنامج مجاني