Tiktokから有用な情報をこすり落としてダウンロードします。
これは公式のAPIサポートなどではありません。これは、Tiktok Web APIを使用してメディアや関連するメタ情報をスクレイプしているスクレーパーです。
特徴
やる
貢献
インストール
使用法
方法
オプション
約束で使用します
イベントで使用します
セッション値を取得/設定する方法
ビデオにアクセス/ダウンロードする方法
出力の例
ビデオフィード方法
getUserProfileInfo
Gethashtaginfo
getVideometa
getMusicInfo
建てる
走る
端末の例
ダウンロード履歴を管理します
バッチでスクレイプしてダウンロードします
出力ファイルの例
ターミナルで
Docker
モジュール
現時点では、透かしなしでビデオをダウンロードすることはできません
ユーザー、ハッシュタグ、トレンド、またはMusic-IDページから無制限の投稿メタデータをダウンロードする
PostメタデータをJSON/CSVファイルに保存します
透かしの有無にかかわらずメディアをダウンロードし、zipファイルに保存します
CLIから透かしがなく、単一のビデオをダウンロードしてください
Tiktok APIにカスタムリクエストを行うためにURLに署名します
ユーザー、ハッシュタグ、単一のビデオページからメタデータを抽出します
以前の進捗状況を保存し、以前にダウンロードされなかった新しいビデオのみをダウンロードしてください。この機能は、CLIからのみ機能し、ダウンロードフラグがオンの場合にのみ機能します。
CLIで以前にダウンロードした投稿履歴を表示および管理する
ユーザー、ハッシュタグ、音楽フィード、バッチモードでファイルで指定された単一ビデオをこすることとダウンロード
CLI:同じビデオのダウンロードを避けるために、進捗状況を保存します
すべてをtypeScriptで書き直します
プロキシサポートを改善します
テストを追加します
ウォーターマークなしでビデオをダウンロードしてください
ビデオがダウンロードされたかどうかを出力ファイル(CSV/JSON)に示します
Dockerから構築して実行します
CLI:バッチでこすり落としてダウンロードします
CLI:ファイルからプロキシをロードします
CLI:オプションのzip
APIを更新します
WebHook URL(CLI)を設定する
音楽メタデータを収集するための新しい方法を追加します
手動ページネーションを追加します
ドキュメントを改善します
オーディオファイルをダウンロードします
Webインターフェイス
テストを忘れないでください
糸検査
糸ビルド
Tiktok-scraperは、node.js v10+を実行する必要があります。
NPMからインストールします
npm i -g tiktok -scraper
糸からインストールします
YARNグローバルはTiktok-Scraperを追加します
$ tiktok-scraper-ヘルプ 使用法:tiktok-scraper <command> [options] コマンド: Tiktok-Scraperユーザー[ID]ユーザー名からビデオをスクレイプします。ユーザー名のみを入力します Tiktok-scraperハッシュタグ[id]ハッシュタグからビデオをこすります。 #なしでハッシュタグを入力します Tiktok-Scraper Trendの現在のトレンドからの削り取り Tiktok-ScraperMusic [ID]音楽ID番号から投稿をこすります Tiktok-Scraperビデオ[ID]透かしなしで単一のビデオをダウンロードします Tiktok-Scraperの履歴以前のダウンロード履歴を表示します Tiktok-scraper from-file [file] [async]ユーザー、ハッシュタグ、音楽、ファイルに言及したビデオをこすります。 1行ごとに1値 オプション: - バージョン番号[boolean] version showバージョン番号 - セッションセットセッションクッキー値。時々セッションが可能です 任意のメソッドからデータを削減するときに役立つ[デフォルト: ""] - アクティブセッションのリストを備えたファイルへのセッションファイルセットパス。 1つ 1行あたりセッション! [デフォルト: ""] - リクエスト間のタイムアウトタイムアウト。タイムアウトはミリ秒単位です: 1000 mls = 1 s [デフォルト:0] -Number、-nスクレイプする投稿の数。 0を設定する場合はすべてを設定します 投稿は削られます[デフォルト:0] - この日付までに公開された投稿はありません(タイムスタンプ)。 0に設定すると、フィルターが非アクティブされます[デフォルト:0] -Proxy、-p Set Single Proxy [default: ""] -Proxy-Fileファイルからプロキシを使用します。スクレーパーはランダムプロキシを使用します 各リクエストごとのファイルから。 1行1プロキシ。 [デフォルト: ""] -download、-d名前入力を使用してフォルダーにビデオ投稿をダウンロードする [id] [boolean] [デフォルト:false] -asyncdownload、-Aconcurrentダウンロードの数[デフォルト:5] -HD HDでビデオをダウンロードします。ビデオサイズはX5-X10倍大きくなり、スクレーパーの実行速度に影響します。これ オプションは-Wフラグと組み合わせてのみ動作します [boolean] [デフォルト:false] -zip、-z zipダウンロードされたすべてのビデオ投稿[boolean] [デフォルト:false] - すべての出力ファイルを保存するFILEPATHファイルパス。 [デフォルト: "/users/karl.wint/documents/projects/javascript/tiktok-scraper"]] -filetype、-tの出力ファイルのタイプは、投稿情報が 保存。 'All' - すべての投稿に関する情報を「JSON」と「CSV」に保存します[選択: "CSV"、 "json"、 "all"、 "] [default:" "] - fileName、-f set出力ファイルのカスタムファイル名[default: ""] - nowatermark、-wウォーターマークなしでビデオをダウンロードします。注:最近の更新を使用すると、ハッシュタグフィードを削っている場合にのみこのオプションを使用する必要があります。ユーザー/トレンド/音楽フィードにはデフォルトでこのURLがあります[boolean] [default:false] - store、-sスクレーパーはOS TMPまたはカスタムフォルダーの進行状況を保存し、将来の使用は複製を回避する新しいビデオのみをダウンロードします[boolean] [default:false] - historypath履歴ファイル/ファイルが保存されるカスタムパスの設定「タイプ:入力」または「すべて」して、すべての歴史をきれいにします。例:user:bob [default: ""] -webhookurl webhook urlを設定して、httpリクエストとしてスクレーパー結果を受信します。たとえば、独自のAPI [default: ""] - method webhook urlへのデータを投稿または取得リクエスト[選択: "get"、 "post"] [default: "post"] - ヘルプショーヘルプ[ Boolean]例:Tiktok -scraperユーザーユーザー名-d -n 100 - セッションSID_TT = DAE32131231 TIKTOK -SCRAPER TREND -D -N 100 - セッションSID_TT = DAE32131231 TIKTOK -SCRAPER HASHTAG HASHTAG_NAMAMAMAME -D -N 100 -SSISSION SID_TTTT = dae32131231 tiktok-scraper music MUSIC_ID -d -n 50 --session sid_tt=dae32131231 tiktok-scraper video https://www.tiktok.com/@tiktok/video/6807491984882765062 -d tiktok-scraper history tiktok-scraper history -r user :Bob Tiktok-Scraper History -RすべてのTiktok-Scraper From-File batch_file async_tasks -d
端末の例
ダウンロード履歴を管理します
バッチでスクレイプしてダウンロードします
Dockerを使用することにより、-filepathと-historypathを使用することはできませんが、-vを使用してボリューム(すべてのファイルが保存される場所でホストパス)を設定できます。
Dockerビルド。 -t tiktok-scraper
例1:履歴ファイルを含むすべてのファイルは、Dockerを実行しているディレクトリ($ PWD)に保存されます
docker run -v $(pwd):/usr/app/files tiktok -scraperユーザーtiktok -d -n 5 -s
例2:履歴ファイルを含むすべてのファイルは/user/blah/ダウンロードで保存されます
docker run -v/user/blah/downloads:/usr/app/files tiktok -scraperユーザーtiktok -d -n 5 -s
.user(id、options)//特定のユーザーからの投稿をスクレイプする(promise).hashtag(id、options)//ハッシュタグセクションからの投稿(promise).trend( ''、options)//トレンドから投稿をスクレイプしますセクション(promise).music(id、options)//音楽ID(Promise).userevent(id、options)//特定のユーザーからの投稿をスクレイプする(event).hashtagevent(id、options)//スクレイプ投稿から投稿します。ハッシュタグセクション(イベント)から.trendevent( ''、options)//トレンドセクション(イベント)から投稿をスクレイプします。 )//ユーザープロファイル情報を取得します。Gethashtaginfo( 'hashtag'、options)// hashtag information.signurl( 'url'、options) watermark.getMusicInfoのないビデオURLを含むメタ情報( 'https://www.tiktok.com/music/original-sound-680188854993435718'、options)//音楽メタデータを取得
const options = {//スクレイプする投稿の数:{int default:20} number:50、//この日付以降に公開されているスクレイプ投稿:{int default:0} absion:0、// set session:{string []デフォルト:['']} //ユーザー/トレンド/音楽/ハッシュタグフィードをスクレイプするには、認証されたセッションクッキー値が必要です。 21312213 ']、// proxy {string [] |文字列のデフォルト: ''} // HTTPプロキシ:127.0.0.1:8080//ソックスプロキシ:Socks5://127.0.0.1:8080 //アレイとしてプロキシを渡すことができ、スクレーパーはアレイからプロキシをランダムに選択します。 requestSproxy: ''、// {true}に設定してユーザーIDで検索します:{boolean default:false} by_user_id:false、//非同期にダウンロードする投稿の数。 {download:true}:{int default:5} asyncdownload:5、//非同期に削るべき投稿の数の場合:{int default:3} //現在のオプションは現在のタイプでのみ適用されます:音楽とハッシュタグ/ /他のタイプでは、Tiktok APIへのすべてのリクエスト応答が「MaxCursor」値を提供しているため、次のRequestAsyncScrapingを送信するために必要な「MaxCursor」値を提供しているため、常に1です。 : 'current_dir'} filepath: `current_dir`、//出力ファイルのカスタムファイル名:{string default: ''} filename:` current_dir`、//情報付きの出力は、csvまたはjsonファイルに保存できます:{{{文字列のデフォルト: 'na'} // 'csv' 'csv //' json 'を保存してjson //' all 'in json and csv //' na 'を保存して、このstepfiletypeをスキップします: `na`、 //カスタムヘッダーの設定:ユーザーエージェント、Cookieなど、//注:ビデオフィードまたは単一のビデオメタデータを解析すると、その見返りに{Headers}オブジェクトを受信します。 {videourl}値を介してビデオをダウンロードすると同じヘッダーヘッダーを使用する必要があります:{'user-agent': "blah"、参照: 'https://www.tiktok.com/',cokie: `tt_webid_v2 = 68dssds`、 }、//ウォーターマークなしでビデオをダウンロード:{booleanデフォルト:false} //透かしなしでダウンロードするようにtrueに設定// false} //このオプションは、{nowatermark}が{true} hdvideo:falseに設定されている場合にのみ機能します。 // captchaでブロックされる//独自のverifyfp値を設定できます。デフォルト(hardcoded)が使用されますverifyfp: ''、//メインホストをtiktokテストenpoint.// captchaによってリクエストがブロックされたら、試してみることができますTiktok Test Endpoints.usetestendpointsを使用するには:false};
例フォルダーを確認することを忘れないでください
const tiktokscraper = require( 'tiktok-scraper'); // username(async()=> {const posts = await tiktokscraper.user( 'username'、{number:100、sessionlist:['sid_tt = 58BA9E34431774703D3C34E60D584475; ']} 、ユーザーIDを文字列として渡す必要があります(async()=> {try {const posts = await tiktokscraper.user( `user_id`、{number:100、by_user_id:true、sessionlist:['sid_tt = 58ba9e34431774703d3c34e60d58475; }); console.log(posts);} catch(error){console.log(error);}})() ''、{number:100、sessionlist:['sid_tt = 58ba9e34443174703d3c34e60d584475;']}); console.log(posts);} catch(error){console.log(error);}}); // hashtag feed(async()=> {try {const posts = await tiktokscraper.hashtag( 'hashtag'、{number:100、sessionlist:['sid_tt = 58ba9e344431774703d3c34e60d58475;']; error){console.log(error);}})(); //単一のユーザープロファイル情報を取得:フォロワーの数//入力 - ユーザー名//オプション - 不要(async()=> {try {const {constユーザー= await tiktokscraper.getuserprofileinfo( 'username'、options); console.log(user);} catch(error){console.log(error);}})(); //単一のハッシュタグ情報を取得:ビュー数を取得するand etc // input -hashtag name // options -no no nofice(async()=> {try {const hashtag = await tiktokscraper.gethashtaginfo( 'hashtag'、options); console.log(hashtag);} catch(error)(エラー) {console.log(error);}})(); //単一のビデオメタデータ//入力-web_video_url //を取得する例:https://www.tiktok.com/@tiktok/video/6807491984882765062//オプション - 必須(async()=> {try {const videometa = await tiktokscraper.getVideometa( 'https://www.tiktok.com/@tiktok/video/6807491984882765062'、options.log(videometa); (エラー){console.log(error);}})();
const tiktokscraper = require( 'tiktok-scraper'); const users = tiktokscraper.userevent( "tiktok"、{number:30}); users.on.on( 'data'、json => {// json形式のデータ})) ; users.on( 'done'、()=> {//completed); users.on('error '、error => {// error message}); users.scrape(); const hashtag = tiktokscraper。 HashtageVent( "Summer"、{number:250、proxy: 'socks5://1.1.1.1:90'}); hashtag.on( 'data'、json => {// json形式のデータ}); hashtag。 on( 'done'、()=> {//completed)
必要ありません
非常に一般的な問題は、TiktokがIP/プロキシをブラックリストに登録している場合、そのような場合はセッションを設定しようとすることができ、成功の可能性が高くなります。
セッションを取得:
任意のブラウザでhttps://www.tiktok.com/を開きます
アカウントにログインします
右クリック - > [インスペクター] - >ネットワーキング
更新ページ - > tiktokに行われたリクエストを選択します - >リクエストヘッダーセクションに移動 - > Cookies
Cookies sid_tt値で検索します。通常、そのように見えます: SID_TT = 521KKADKASDASKDJ4J213J12J312;
SID_TT = 521KKADKASDASKDJ4J213J12J312; - これは、ユーザー/ハッシュタグ/音楽/トレンドフィードをスクレイプするために使用する必要がある認証されたセッションクッキー値になります
セッションを設定します:
CLI :
例Content /var/bob/sessionlist.txt:
オプション- セッションを使用してシングルセッションを設定します。たとえば、 -session sid_tt = 521kkadkasdaskdj4j213j12j312;
オプション- セッションファイルを使用して、セッションのリストでファイルにパスを設定します。たとえば、 session-file /var/bob/sessionlist.txt
sid_tt=521kkadkasdaskdj4j213j12j312; sid_tt=521kkadkasdaskdj4j213j12j312; sid_tt=521kkadkasdaskdj4j213j12j312; sid_tt=521kkadkasdaskdj4j213j12j312;
モジュールでは、オプション値セッションリストを設定してセッションを設定できます。たとえば、セッションリスト:["sid_tt = 521kkadkasdaskdj4j213j12j312;"、 "sid_tt = 12312312312312;"]]
この部分はモジュールの使用に関連しています(CLIではありません)
{videourl}値は、任意の値を含めることができるCookie値{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"、 "htps:/// www.tiktok.com/","cookie ":" tt_webid_v2 = 689854141086886123 "}、
{オプション}で自分のヘッダーを渡すことができます。
const headers = {"user-agent": "bob"、 "referer": "https://www.tiktok.com/","cookie": "tt_webid_v2 = bob"} getVideometa( 'web_video_url'、{headers}} )user( 'web_video_url'、{headers})hashtag( 'web_video_url'、{headers})trend( 'web_video_url'、{headers})music( 'web_video_url'、{headers})// {videourl}同じカスタムヘッダーを使用して値
方法の出力の例:ユーザー、ハッシュタグ、トレンド、音楽、userevent、ハッシュテージベント、musevent、tredentevent
{headers:{'user-agent': 'mozilla/5.0(macintosh; intel mac os x 10_15_5)applewebkit/537.36(gecko)chrome/86.0.4240.80サファリ/537.36 .tiktok.com/'、cookie:' tt_webid_v2 = 68985414108686123 '}、コレクター:[{id:' video_id '、text:' caption '、createTime:' 1583870600 '、authormeta:{id:' user id '、名前: 'username'、follow:195、ファン:43500、heart: '109398'、ビデオ:3、digg:95、verified:false、private:false、signature: 'user bio'、avatar: 'avatar_url'}、musicmeta: {MusicId: '6808098113188120838'、MusicName: 'blah blah'、musicauthor: 'blah'、musicoriginal:true、playurl: 'sound/music_url'、}、covers:{default: 'cover_url'、 'cover_url'、dynamic : 'cover_url'}、imageurl: 'image_url'、videourl: 'video_url'、videourlnowatermark: 'video_url_without_the_watermark'、videometa:{width:{width:{width:{width:480、height:864、比率:14、duration:14}、diggcount:2104、sharecount: 1、playcount:9007、commentcount:50、言及:['@bob'、 '@sam'、 '@bob_again'、 '@and_sam_again']、ハッシュタグ:[{id: '69573911'、名前: 'playwithlife'、タイトル: 'hashtag_title'、cover:[array]} ...]、downloaded:true} ...]、// if {filetype}および{download}オプションはenbabled:zip: '/{current_path}/user_1552963581094 .zip '、json:'/{current_path }/user_1552963581094.json',csv: '/{current_path }/user_1552963581094.csv'}
{secUid: 'MS4wLjABAAAAv7iSuuXDJGDvJkmH_vz1qkDZYo1apxgzaxdBSeIuPiM',userId: '107955',isSecret: false,uniqueId: 'tiktok',nickName: 'TikTok',signature: 'Make Your Day',covers: ['COVER_URL'],coversMedium: ['COVER_URL ']、次の:490、ファン:38040567、heart:' 211522962 '、ビデオ:93、検証:真、digg:29、}
{choulvered: '4231'、changleername: 'love'、text: ''、covers:[]、coversmedium:[]、posts:66904972、views: '194557706433'、iscommerce:fals、splittitle: ''}
{headers:{'user-agent': 'mozilla/5.0(macintosh; intel mac os x 10_15_5)applewebkit/537.36(gecko)chrome/86.0.4240.80サファリ/537.36 .tiktok.com/'、cookie:' tt_webid_v2 = 68985414108686123 '}、コレクター:[{id:' 6807491984882762 '、テキスト:'私たちは#happyathome live series series off today off today off off off off off today a at a 5pm ptime 1584992742 '、authormeta:{id:' 6812221792183403526 '、name:' blah '}、musicmeta:{musicid:' 6822233276137213677 '、' blah '、' blah '、' blah '、' blah '、' blah '、' blah '、' blah '、' blah '、' blah '' blah '、' blah '' blah '' blah '' blah '' blah '' blah '' blah '' blah '' blah '' imauthor video_url '、videourlnowatermark:' video_url_without_the_watermark '、videometa:{width:480、height:864、比率:14、持続時間:14}、カバー:{default:' cover_url '、ogine:' cover_url '}、diggcount:49292、sharecount :339、playcount:614678、commentcount:4023、downloaded:false、hashtags:[]、}]}
{Music:{id: '6882925279036066566'、Title: 'doja x calabria'、playurl: 'dfdfdfdf'、coverthumb: 'dfdfdf'、covermedium: 'dfdfdf'、coverlarge: 'fdfdf'、 'fdfdf'、 'bryce'、 true、playtoken: 'ffdfdf'、keytoken: 'dfdfdfd'、audiourlwithcookie:false、private:false、duration: ''、}、著者:{id: '6835300004094166021'、sibued: 'mashupsbyce'、nicupsbysbryce '、nicupsbryce 'Bryce'、avatarthumb: 'dfdfd'、avatarmedium: 'dfdfdf'、avatarlarger: 'dfdfdf'、signature: 'hi ily:)n70k sound cool tbhn? dz5jzexto0ozoybqiwwwhw5tag_im25lko94dm3k '、secret:false、ftc:false、lations:0、openfavorite:false、commentsetting:0、duettesetting:0、stitchsetting:0、privateccount:false、}、stats:{videocount:361700}、sharemeta:{title:' ' Bryceyouloser | ♬doja x Calabria | on tiktok '、desc:' 361.0kビデオ - ♬doja x calabria 'で作成されたAwesome Short' + 'ビデオを見る}、};
ライセンス
mit
フリーソフトウェア