paloma blog

NWエンジニアやってます。主に自宅環境のお遊びを書きます。Pythonもちょっと。タイトルは好きなカクテルから。

twitter archiveからjekyll用postのmdファイルを作る

映画資料記録のツールをjekyllで運用してみることにしました。
まずはtwitter archiveで取得したデータを抜き出さないといけません。
ツイートデータのフォーマットがjsonぽかったのでpythonで抜き出しjekyll用のmdファイルに落とし込みたいと思います。

ツイートデータのフォーマット

投稿データはdata/tweets.jsです。

masashi@DESKTOP-HBP3520:~/twitter-2023-07-11-de75330~$ head data/tweets.j
s
window.YTD.tweets.part0 = [
  {
    "tweet" : {
      "edit_info" : {
        "initial" : {
          "editTweetIds" : [
            "1678045323875450881"
          ],
          "editableUntil" : "2023-07-09T15:15:56.000Z",
          "editsRemaining" : "5",

中身はjsonっぽいフォーマットですが「window.YTD.tweets.part0 =」が邪魔なので削除します。

日付と投稿内容を抜き出してmdファイルを作るコード

jekyllの記事データはyyyy-mm-dd-title.mdというフォーマットなので

  • 投稿日時、映画タイトルからファイル名作成
  • 投稿内容をファイルに書き込み

という処理を行います。

twitterも数年使ってますとやはり何千行ものデータになるので、
ツールで投稿した映画情報データのみ抜き出すようプログラムを作成します。
というわけでコードはこちら。
解説は割愛します。

# coding: utf-8

import json
import re
import datetime

with open('tweets.js', 'r', encoding='utf8') as f:
    tw = f.read()

lfile = json.loads(tw)

for x in range(len(lfile)):
    if '視聴しました' in lfile[x]['tweet']['full_text']:
        posted = lfile[x]['tweet']['created_at']
        strtime = datetime.datetime.strptime(posted, "%a %b %d %H:%M:%S %z %Y")
        titlefile = strtime.strftime('%Y-%m-%d')
        content = lfile[x]['tweet']['full_text']
        try:
            title = re.search('「.+」', content).group()
            title = title[1:-1]
            titlefile = titlefile + '-' + title + '.md'
            with open(titlefile, 'w', encoding='utf-8') as md:
                md.write(content.replace('---','=====')) # jekellのfront matterと重複するので変換
        except:
            pass

実行

修正したtweets.jsを上の階層にコピーしました。

masashi@DESKTOP-HBP3520:~/twitter-2023-07-11-de75330~$ ls
'Your archive.html'   assets   create_mdfiles.py   data   tweets.js

コード実行。

masashi@DESKTOP-HBP3520:~/twitter-2023-07-11-de75330~$ python3 create_mdfiles.py

320ファイル作成できました。
実際はテスト投稿で重複データもありますが記録したものだけでも300本は映画を見てきたということですね。
これはなかなか。

masashi@DESKTOP-HBP3520:~/twitter-2023-07-11-de75330~$ ls *md | wc -l
320

ちゃんとフォーマット通りのファイルができてます。
2019年に記録ツールを作ったんですねぇ。

masashi@DESKTOP-HBP3520:~/twitter-2023-07-11-de75330~$ ls *.md | head
2019-08-24-Pulp Fiction.md
2019-08-24-Smoke.md
2019-08-31-City of Tiny Lights.md
2019-09-07-Dazed and Confused.md
2019-09-14-Ali G Indahouse.md
2019-09-22-How to Talk to Girls at Parties.md
2019-10-06-American Hustle.md
2019-10-14-Killing Them Softly.md
2019-10-19-The Internship.md
2019-10-27-Batman.md

ファイルの中見。
投稿データがそのままbody部になってます。
front matterの記述をつけ忘れたけどjekyllのデザインも決めてないし後で修正しましょう。

masashi@DESKTOP-HBP3520:~/twitter-2023-07-11-de75330~$ cat 2019-08-24-Smoke.md
2019-08-24に「Smoke」を視聴しました。

その他Infomation
=====
Year: 1995
Genre: Comedy, Drama
Director: Wayne Wang
Actors: Giancarlo Esposito, Jose Zuniga, Stephen Gevedon, Harvey Keitel
Production: Miramax
=====

jekyllにデプロイ

作成したファイルを検証環境のjekyllに入れます。
_posts配下にtarで固めたものを展開するだけ。

serveで立ち上げます。
軽量フレームワークといっても300ファイルあるとさすがに1分弱ほど起動にかかります。

Run in verbose mode to see all warnings.
                    done in 52.612 seconds.

ブラウザでアクセス

ブラウザで見てみます。

デザインはデフォルトのものなのでブログタイトル等そのままで味気ないですが最新の日付から降順で並んでますね。
twitterみたいにリンク飛ばずとも中身も表示させたいところですがブログツールなのでこんなものでいいでしょう。 pagerの設定をしていないのでスクロールがめちゃ長いです。

中身をみるとこちらもレイアウトが崩れちゃってますね。
区切りの記号か文字コードがよくなかったか。

こちらの修正はするとして、ファイルを置いていくだけで更新できるのはお手軽です。
記録ツールの代替としても機能しそう。
なのでomdb apiの情報をjekyllフォーマットで保存するツールも作らないとですね。