X(Twitter) のメディアタブに表示されている画像のURLを一括で取得する方法。 開発者ツールのコンソールで実行するだけで、オリジナル画質の画像URLを取得できる。

メディアタブとは

ユーザープロフィールページの「メディア」タブをクリックすると、 そのユーザーが投稿した画像や動画が一覧表示される。

https://x.com/username/media の形式でアクセスできる。

基本:画像URLを取得する

1. メディアタブを開く

対象ユーザーのプロフィールページで「メディア」タブをクリック。

2. 開発者ツールを開く

以下のいずれかの方法で開く:

  • Macの場合: Command + Option + J
  • Windowsの場合: Ctrl + Shift + J
  • または右クリック → 検証Consoleタブ

3. コンソールにスクリプトを入力

以下のスクリプトをコピーして、コンソールに貼り付けて Enter。

// 現在表示されている画像URLを取得
const urls = Array.from(document.querySelectorAll('img[src*="pbs.twimg.com"]'))
  .map(img => img.src.replace(/&name=\w+/, '&name=orig'))
  .filter(url => url.includes('/media/'))
  .filter((v, i, a) => a.indexOf(v) === i);

console.log(urls.join('\n'));
console.log(`取得件数: ${urls.length}件`);

現在表示されている画像のURLがコンソールに出力される。 &name=orig が付いているのでオリジナル画質で取得できる。

4. 出力されたURLをコピー

コンソールに出力されたURLをマウスでドラッグして選択し、コピー(Ctrl+C / Cmd+C)。

💡 Tips: 見やすく出力する

区切り線付きで見やすく出力するバージョン:

// コンソールでURLを全選択しやすく出力
const urls = Array.from(document.querySelectorAll('img[src*="pbs.twimg.com"]'))
  .map(img => img.src.replace(/&name=\w+/, '&name=orig'))
  .filter(url => url.includes('/media/'))
  .filter((v, i, a) => a.indexOf(v) === i);

// 区切り線で見やすく出力
console.log('========== 画像URL一覧 ==========');
console.log(urls.join('\n'));
console.log('==================================');
console.log(`取得件数: ${urls.length}件`);
console.log('上記のURLをコピーしてください');

これだとURLの部分を選択しやすくなる。

ブックマークレット版(おすすめ)

毎回コンソールを開くのが面倒な場合、ブックマークレットにしておくとワンクリックで実行できる。 ブックマークレットならクリップボードへの自動コピーも動作する。

登録方法

  1. ブックマークバーを表示(Ctrl+Shift+B / Cmd+Shift+B
  2. ブックマークバーの上で右クリック → 「ページを追加」
  3. 名前: X画像URL取得(任意)
  4. URL: 以下のコードをコピー
javascript:(function(){const u=Array.from(document.querySelectorAll('img[src*="pbs.twimg.com"]')).map(i=>i.src.replace(/&name=\w+/,'&name=orig')).filter(url=>url.includes('/media/')).filter((v,i,a)=>a.indexOf(v)===i);navigator.clipboard.writeText(u.join('\n')).then(()=>alert(u.length+'件の画像URLをコピーしました!'));})();

登録後、メディアタブでブックマークレットをクリックすると、 画像URLが自動的にクリップボードにコピーされる。

💡 ブックマークレットがおすすめな理由
  • ワンクリックで実行できる
  • クリップボードへの自動コピーが動作する(コンソールでは不可)
  • 開発者ツールを開く必要がない

応用:自動スクロールで全画像を取得

メディアタブは最初に一部の画像しか表示されないので、 スクロールして追加読み込みする必要がある。 自動スクロールで全画像を読み込んでから取得するスクリプト:

// 自動スクロールして全画像を読み込む
async function loadAllMedia() {
  let lastHeight = 0;
  let scrollCount = 0;
  const maxScrolls = 50; // 最大スクロール回数
  
  while (scrollCount < maxScrolls) {
    window.scrollTo(0, document.body.scrollHeight);
    await new Promise(resolve => setTimeout(resolve, 1000));
    
    const currentHeight = document.body.scrollHeight;
    if (currentHeight === lastHeight) {
      console.log('最後まで読み込みました');
      break;
    }
    lastHeight = currentHeight;
    scrollCount++;
  }
  
  // URL取得
  const urls = Array.from(document.querySelectorAll('img[src*="pbs.twimg.com"]'))
    .map(img => img.src.replace(/&name=\w+/, '&name=orig'))
    .filter(url => url.includes('/media/'))
    .filter((v, i, a) => a.indexOf(v) === i);
  
  console.log(`取得件数: ${urls.length}件`);
  console.log(urls.join('\n'));
  
  return urls;
}

// 実行
loadAllMedia();

このスクリプトは自動的にスクロールして画像を読み込み、 最後まで到達したらURLを取得する。 大量の画像がある場合は時間がかかるので注意。

取得したURLをダウンロードする

⚠️ ブラウザからの直接ダウンロードについて

Twitter の画像は別ドメイン(pbs.twimg.com)にあるため、 ブラウザのセキュリティ制約(CORS)により、JavaScriptから直接ダウンロードすることができません。

そのため、以下のいずれかの方法でダウンロードする必要があります。

方法1: タブで一括表示 → 手動保存

各画像を新しいタブで開いて、手動で保存する方法:

// 新しいタブで画像を一括表示
async function openAllMedia() {
  // 1. URL取得
  const urls = Array.from(document.querySelectorAll('img[src*="pbs.twimg.com"]'))
    .map(img => img.src.replace(/&name=\w+/, '&name=orig'))
    .filter(url => url.includes('/media/'))
    .filter((v, i, a) => a.indexOf(v) === i);
  
  console.log(`${urls.length}件の画像を新しいタブで開きます...`);
  
  // 確認
  if (!confirm(`${urls.length}件の画像を新しいタブで開きますか?`)) {
    return;
  }
  
  // 2. 順次タブで開く
  for (let i = 0; i < urls.length; i++) {
    window.open(urls[i], '_blank');
    console.log(`[${i + 1}/${urls.length}] タブを開きました`);
    
    // ブラウザの制限を避けるため少し待機
    await new Promise(resolve => setTimeout(resolve, 300));
  }
  
  console.log('完了!各タブで右クリック→「名前を付けて保存」でダウンロードしてください');
}

// 実行
openAllMedia();
⚠️ 初回実行時の確認

初回実行時、ブラウザのポップアップブロックが働いて1つ目のタブしか開かれません。 以下の手順でポップアップを許可してください:

  1. アドレスバーの右側に表示される ポップアップブロックのアイコンをクリック
  2. 「x.com のポップアップとリダイレクトを常に許可する」を選択
  3. スクリプトを再実行

許可後は全ての画像が新しいタブで開かれます。

各タブで右クリック → 「名前を付けて画像を保存」でダウンロード。

💡 Tips
  • 大量の画像がある場合、ブラウザが重くなる可能性がある
  • 10〜20件ずつに分けて実行するのがおすすめ

方法2: wget で一括ダウンロード

wget を使ってターミナルから一括ダウンロード:

手順

  1. 上記のスクリプトでURLを取得してコピー
  2. テキストエディタで urls.txt に保存(1行1URL)
  3. ターミナルで以下を実行
wget -i urls.txt -P ./twitter_images

./twitter_images フォルダに全ての画像がダウンロードされる。

💡 wget がない場合
  • Mac: brew install wget
  • Windows: Git Bash または WSL で wget が使える

方法3: Python3 で一括ダウンロード(おすすめ)

Python3 を使った一括ダウンロードスクリプト:

準備

pip3 install requests

スクリプト

download_twitter_images.py として保存:

import requests
import os

# urls.txt から URL を読み込んでダウンロード
def download_images(url_file='urls.txt', output_dir='twitter_images'):
    # 出力ディレクトリを作成
    os.makedirs(output_dir, exist_ok=True)
    
    # URLs を読み込み
    with open(url_file, 'r') as f:
        urls = [line.strip() for line in f if line.strip()]
    
    print(f'{len(urls)}件の画像をダウンロード開始...')
    
    # 各URLをダウンロード
    for i, url in enumerate(urls, 1):
        try:
            response = requests.get(url, timeout=30)
            response.raise_for_status()
            
            # ファイル名を生成
            filename = f'twitter_image_{i:03d}.jpg'
            filepath = os.path.join(output_dir, filename)
            
            # 保存
            with open(filepath, 'wb') as f:
                f.write(response.content)
            
            print(f'[{i}/{len(urls)}] {filename} ダウンロード完了')
            
        except Exception as e:
            print(f'[{i}/{len(urls)}] エラー: {e}')
    
    print(f'\n完了!{output_dir}/ に保存されました')

if __name__ == '__main__':
    download_images()

実行

  1. URLを取得して urls.txt に保存(1行1URL)
  2. スクリプトと同じフォルダに urls.txt を配置
  3. ターミナルで実行
python3 download_twitter_images.py

twitter_images/ フォルダに twitter_image_001.jpgtwitter_image_002.jpg... の形式で保存される。

💡 Python の利点
  • 進捗が表示されるので分かりやすい
  • エラーが出てもスキップして続行する
  • 連番でファイル名を整理できる
  • Windows / Mac / Linux どこでも動く

注意事項

  • 大量の画像を一気にダウンロードすると、Twitter側のレート制限に引っかかる可能性がある
  • 他人の画像をダウンロードする場合、著作権に注意
  • ブラウザによっては自動ダウンロードがブロックされる場合がある
  • スクリプトはTwitterの仕様変更で動かなくなる可能性がある

関連記事