LinkSwiftユーザースクリプトによるクラウドストレージ直リンク取得手法

LinkSwiftは、ブラウザ上で動作するユーザースクリプトであり、主要なクラウドストレージサービスからファイルの生のダウンロードURLを抽出する。公式クライアントや速度制限を回避し、外部ダウンローダーと組み合わせて高速な取得を実現する。

動作の仕組み

本スクリプトは、各ストレージが提供する公開APIエンドポイントに対して正規のHTTPリクエストを送信し、ファイルのメタデータやダウンロード用トークンを解析する。一切の改変やクラッキングは行っておらず、ログイン状態を維持したままAPIの仕様に従って直リンクを生成する。解析処理はサービスごとに独立したモジュールとして実装され、設定はconfigディレクトリ内のJSONファイルで管理される。

{
  "endpoint": "https://api.example.com/v2/file",
  "method": "GET",
  "headers": {
    "Authorization": "Bearer {access_token}"
  },
  "query_params": ["file_id", "share_key"],
  "response_path": "data.download_url"
}

上記のような構造化された設定によって、新しいストレージへの対応が容易になり、API変更時も設定ファイルの修正だけで追随できる。

導入と基本構成

利用にはユーザースクリプトマネージャ(Tampermonkeyなど)が必須である。ブラウザに拡張機能を追加した後、スクリプトファイルをインストールする。プロジェクトにはメインスクリプトとストレージ固有の設定ファイルが含まれており、マネージャのインポート機能で読み込むだけで有効化される。

ファイル構造は以下のようになっている。

.
├── disk_link_extractor.user.js
├── config
│   ├── pan_baidu.json
│   ├── aliyun_pan.json
│   ├── tianyi_pan.json
│   ├── xunlei_pan.json
│   ├── quark_pan.json
│   └── cmcc_pan.json
├── README.md
└── LICENSE

メインスクリプトはページのDOMを監視し、対応するストレージのページにアクセスすると自動的に「直リンク解析」ボタンを挿入する。ユーザーはファイルを選択してボタンを押すだけで、利用可能なダウンロードモードが一覧表示される。

ダウンロードモードと外部ツール連携

抽出された直リンクは、複数の方法でダウンロードできる。ブラウザのネイティブダウンロードに加え、以下のようなモードが用意されている。

  • Aria2モード:マルチスレッド・分割ダウンロード用のコマンドやRPCペイロードを生成する。例:aria2c -s 10 -x 10 --dir=/downloads "URL"
  • cURLモード:ターミナルから直接実行可能なcurlコマンドを発行する。ヘッダやCookieも自動で付与される。
  • IDM / Motrix向けエクスポート:ダウンロードマネージャが解釈できる形式でリンクを渡し、帯域を最大限に活用する。

これにより、バッチファイルやCI/CDパイプラインへの組み込みも容易になる。

よくある質問とトラブルシューティング

解析ボタンが表示されない
ページを再読み込みし、Tampermonkeyの実行状態を確認する。スクリプトが有効になっていて、かつサポート対象のURLパターンに合致していることを確かめる。
ダウンロード速度が上がらない
Aria2のコネクション数や分割サイズを調整する(例:--split=16 --min-split-size=1M)。また、アカウントの権限によってはAPIレベルで転送レートが制限される場合もある。
リンクがすぐに期限切れになる
直リンクは動的に生成されるため、有効期限はサービスによって異なる。再解析を実行すれば新しいURLが得られる。ファイルが削除または移動されている可能性も考慮する。

設計上の配慮

このスクリプトはオープンソースであり、すべての通信はブラウザの開発者ツールで監視可能である。API呼び出しに使用するトークンやセッション情報はローカルでのみ処理され、外部サーバーには一切送信されない。また、設定ファイルを個別に管理することで、各ストレージのポリシー変更に迅速に対応できる構造になっている。

タグ: Tampermonkey UserScript Aria2 クラウドストレージAPI 直リンク解析

9月26日 00:31 投稿