twitter(X)の過去ログからはてなブログへ

twitterの検索がいまいち使えないし、自分のツイートさかのぼるのだるいし、というわけで、過去ログから毎日のツイートをまとめたブログを作りました。愛用しているはてなブログです。

pythonで動かしますよ~。

昨日の俺なにしてた
ツイートまとめておくとこ

なぜはてなブログか

埋め込みが楽

ツイートをコピー、引用は良くなくて、公式で案内している形で埋め込む必要があるとかなんとか。

こちらのサイトにURLを入れるとHTMLコードが出てきます。

X Publish
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">タイムラインに突然現れるキチガイ踊り子です。<br>日常のどうでもいい愚痴・遠足計画・旅の感想・昔話・毒吐きを適当な頻度で投下中。<br>反応には基本的に絡み返します(褒めてもdisっても)<br>静かに見てるだけでも歓迎だけど、放置されても気にしないタチ。(とgrokが纏めた)</p>&mdash; エルベ (@ElveWave) <a href="https://x.com/ElveWave/status/2055635194212950445?ref_src=twsrc%5Etfw">May 16, 2026</a></blockquote> <script async src="https://platform.x.com/widgets.js" charset="utf-8"></script>

これがはてなブログ(はてな記法)なら

[https://x.com/ElveWave/status/2055635194212950445:embed]

でOKデス(表示に時間かかりますが)

投稿が楽

※今回はインポートするので関係ないです。

楽というか、API使ったことがあるから慣れているというか(;’∀’)

はてなブログAtomPub | Hatena Developer Center
本ドキュメントに関する注意事項

実践

ブログ準備

はてなブログ | 無料ブログを作成しよう で新しいブログを作って、基本設定は「はてな記法モード」(多分別のモードでも動きますがw)

データ準備

twitterのログをリクエストする

何年分もあると24時間以上かかりますのでとりあえずリクエストしてしまいましょう。

設定とプライバシー→設定→アカウント→データのアーカイブをダウンロード

→パスワードを入力→次へ→「データをリクエスト」ボタンを押す

データの準備ができたらメールが来るので画面閉じても大丈夫。

メールが来たらダウンロードして右クリックして「すべて展開…」でどっかに解凍(最近言わないねw)しておいてください。

Python

Download Python
The official home of the Python Programming Language
で「Download Python install manager」のボタン押してポチポチインストールして、再起動すれば動くと思いますよ~。

(動かなかったのでMicrosoftのVisualStudioCode入れたw)

ソース

安心してください。gemini作です←

import json
import datetime
import re

# 設定
INPUT_FILE = 'tweets.js'  # アーカイブのファイル名
OUTPUT_FILE = 'hatena_import.txt'
AUTHOR_ID = 'ElveWave'  # はてなIDまたはTwitterID カテゴリにも使ってます

def convert_utc_to_jst(utc_str):
    utc_time = datetime.datetime.strptime(utc_str, '%a %b %d %H:%M:%S %z %Y')
    jst_time = utc_time.astimezone(datetime.timezone(datetime.timedelta(hours=9)))
    return jst_time

def main():
    with open(INPUT_FILE, 'r', encoding='utf-8') as f:
        content = f.read()
    
    json_str = re.sub(r'^window\.YTD\.[^=]+=\s*', '', content)
    tweets_data = json.loads(json_str)

    daily_tweets = {}

    for item in tweets_data:
        tweet = item.get('tweet', {})
        text = tweet.get('full_text', '')
        
        # リプライ、およびリポストを除外
        if text.startswith('@') or tweet.get('in_reply_to_status_id') or text.startswith('RT @'):
            continue

        jst_time = convert_utc_to_jst(tweet['created_at'])
        date_str = jst_time.strftime('%Y-%m-%d')

        tweet_id = tweet.get('id_str')
        tweet_body = f"[https://x.com/{AUTHOR_ID}/status/{tweet_id}:embed]"

        tweet_info = {
            'time': jst_time.strftime('%H:%M:%S'),
            'body': tweet_body
        }

        if date_str not in daily_tweets:
            daily_tweets[date_str] = []
        daily_tweets[date_str].append(tweet_info)

    # Movable Type形式で書き出し
    with open(OUTPUT_FILE, 'w', encoding='utf-8') as out:
        for date_str in sorted(daily_tweets.keys()):
            tweets = sorted(daily_tweets[date_str], key=lambda x: x['time'])
            
            # Movable Typeの標準日付フォーマット (MM/DD/YYYY HH:MM:SS) に変換
            dt = datetime.datetime.strptime(date_str, '%Y-%m-%d')
            mt_date = dt.strftime('%m/%d/%Y 23:59:59')
            
            out.write(f"AUTHOR: {AUTHOR_ID}\n")
            out.write(f"TITLE: {date_str}のツイートまとめ\n")
            out.write("STATUS: Publish\n")
            out.write("CONVERT BREAKS: 0\n") # HTMLタグを解釈させるための必須設定
            out.write(f"CATEGORY: {AUTHOR_ID}\n")
            out.write(f"DATE: {mt_date}\n")
            out.write("-----\n")
            out.write("BODY:\n")
            
            out.write("<ul>\n")
            for t in tweets:
                out.write(f"  <li>{t['time']} - {t['body']}</li>\n")
            out.write("</ul>\n")
            
            out.write("-----\n")
            out.write("--------\n")

if __name__ == '__main__':
    main()

実行

上記ソースを import_json.py として、過去ログの回答したフォルダの中のdataフォルダに突っ込みましょう。

tweets.jsってのが過去ツイートの本体なので、これを読み込んではてなでインポートするファイル(hatena_import.txt)に変換します。

どうにかしてimport_json.pyを実行してくださいw

(多分、フォルダ右クリック→ターミナルで開く→py .\import_json.py [enter])

同じフォルダに hatena_import.txt ができていたら成功。これをはてなブログでインポートします。

インポート

ここから hatena_import.txt を選んで完成です。

タイトルとURLをコピーしました