
なんで?
- スクリプトの作業を開始した時点では、rutrackerはまだベースをレイアウトしていませんでした。
- このデータベースには、分布の説明があります。
- 同様の記事が2013年にハブに掲載されましたが、残念ながら、このデータベースは公開後に更新されておらず、 リポジトリの最後の更新は2014年1月16日でした。
- これは私の最初の大きなpythonアプリケーションであり、タスクの並列化からWindows用のバイナリのコンパイルに至るまで、この言語の多くの興味深い機能を知ることができました。
スクリプトを実行してサイトをミラーリングする例
python3 ./ loader.py --ids 0000001 5160000 --threads 200 --qsize 25 --resume
パラメータの説明
オプション | 説明 |
---|---|
--ids 0000001 0001000 | 指定範囲内のポンプ分布 |
--ids_file file_with_ids.txt | 指定されたファイルからダウンロードする配布番号を取得します |
--ids_ignore old_finish.txt | 指定されたファイルにない配布をダウンロードから除外します(たとえば、以前のダウンロード中になかった番号をスキップできます) |
-ランダム | ランダムな順序でディストリビューションをダウンロードする |
-スレッド100 | ダウンロードするスレッドの数 |
--proxy_file proxy.txt | socks5プロキシを含むファイル(デフォルト-proxy.txt) |
--login_file login.txt | サイトへのログインを含むファイル(デフォルト-login.txt) |
-再開 | 前のダウンロードを続行します(finished.txtファイルからの配布を無視します) |
-印刷 | 再開オプションと一緒に、ダウンロードされた/ダウンロードされていないディストリビューションの数を表示し、プログラムを終了します |
-フォルダーの説明 | 配布の説明が保存されるディレクトリの名前を示します(デフォルトはdescr) |
--qsize 20 | ダウンロードの最大キュー(デフォルトは30) |
ヘルパーテキストファイルの説明
サイトへのログインを含むファイル形式
ユーザー名1パスワード1
ユーザー名2パスワード2
注:配布の変更日は、プロファイルに設定されているタイムゾーンによって異なります。
プロキシファイル形式
127.0.0.1 8080
127.0.0.1 8081
作業中
ダウンロード済みまたは存在しないディストリビューションの数は、finished.txtファイルに記録されます。 ログはコンソールおよびlog.txtファイルと並行して表示されます。 Cookieはtemp_cookies.txtに書き込まれ、セッション間で保存されます。
結果の説明
table.txtファイルには、分布に関する情報が格納されます(説明を除く)。 各分布について保存されます(区切り文字-\ t):
- ID
- 配布名
- サイズ(バイト単位)
- 種の数
- ごちそうの数
- ハッシュ
- ダウンロード数
- 作成日
- すべてのサブカテゴリを含むカテゴリ(セパレータ-「|」)
例:
4130425 Mark Lutz/ - Python, 4- [2011, PDF, RUS] 12799942 390 9 B507A45DA54ED5EED13221B16E2030DF789A235F 46455 28-08-12 11:28 | |
配布の説明は、配布番号の最初の3桁のサブディレクトリにあるdescrフォルダー(または--folderオプションで指定)の個別のファイルに保存されます。
たとえば、ディストリビューション04893221の説明はdescr \ 048 \ 04893221に保存されます。
スクリプトの作成時に発生した主な問題
- サイトの1つのログインと1つのIPアドレスの制限は、最終的に、最も簡単なソリューションは、1つのストリームでのみIPとログインを同時に使用することです。
- マルチプロセッシングモジュールはforkシステムコールを使用してスレッドを作成し、現在のプロセスをコピーします。 したがって、すべての構成が最初に読み込まれ、ダウンロードリストが作成された場合、プロセスは50 MBを超えるメモリを消費し、すべての子孫は同じように重くなります。 解決策は、最初にプロセスプールを作成してから、構成を読み取ることです。
- 異なるページでは、同じ配布情報をソースコードのわずかに異なる形式で表示できます。 解決策-エラーが発生した場合、スクリプトに追加オプションを手動で導入しました。
- 特に未検証のプロキシを使用している場合、ネットワークスタックを操作すると、あらゆる種類のエラーが大量に発生する可能性があります。 1つのプロキシから多数のエラーが発生した場合-ページがエラーで受信された場合、ブロックされます-再読み込みのためにキューの最後に追加されます。
- マルチプロセッサアプリケーションを作成する際のあらゆる種類のミス。 最も効果的なデバッグ方法は、すべてを記録し、さまざまな表示レベルですべてを記録することでした。
- ビューアーを作成する際の主な問題は、ディストリビューションの検索でした。 MySQLの全文検索は、単語の一部による検索を拒否しました(完全な偶然による一致のみ)。 完全検索が長すぎます。 現在の妥協-リストはシードの数でソートされ、指定された数の結果が見つかるまで検索が順番に実行されます。
視聴者
保存されたデータベースを表示し、ディストリビューションを検索するために、PyQt5を使用してビューアが作成されました。 動作するには、ファイルtable_sorted.tar.bz2が必要です。このファイルには、テキストファイルtable_sorted.txt(table.txt、シード数でソート)が含まれています。 変換には、 このスクリプトを使用できます。
また、(オプションで)スクリプトの横にdescrディレクトリを配置できます。このディレクトリには、配布のアーカイブされた説明があります。 このスクリプトを詰めました 。
ディレクトリとアーカイブ構造の例:
descr / 000 / 00000.tar.bz2 descr / 000 / 00001.tar.bz2 ... descr / 000 / 00099.tar.bz2 descr / 001 / 00100.tar.bz2 descr / 001 / 00101.tar.bz2 ... descr / 001 / 00199.tar.bz2 ...
ビューアーの外観はKDPVに表示されます。
検索オプション
- 単語の前のマイナス記号は、問題のある分布を除外します。
- limit:検索を停止した後の結果に制限を設定するには5(デフォルトは20)。
- 右側のフィールドに、カテゴリ名で検索する単語を入力できます。
ハッシュをダブルクリックすると、マグネットリンクがクリップボードにコピーされます。
必要条件
python3-pyqt5、python3-pyqt5.qtwebkit
設置
python3のスクリプト 。
Windows用のコンパイル済みバイナリ: Mega.nz (30 Mb)(必要なすべてのライブラリを含む)。
2016年1月16日現在
シードの数でソートされた分布に関する基本情報を含むファイル: Mega.nz (118 Mb)。
配布の説明(ビューアーでフォルダーに解凍): Mega.nz (2.06 GB)。
コードに対する批判は大歓迎です。
将来的には、視聴者にlibtorrentサポートを追加し、ディストリビューションのコンテンツを表示したり、プレーヤーにストリーミングしたりする機会を得るというアイデアがあります。
2014年6月(カテゴリなし)および2015年7月(カテゴリあり)から保存されたデータベースもあります。必要に応じて、これらのスライス間の変更に関する統計を計算できます。
スクリプトソースはgithubにアップロードされます。