昨日のツイートをまとめてはてなブログにポストする(PAD)ー1ー

こちらでTwitterの過去ログからはてなブログにインポートする話を書きました。その後、毎日増えていくツイートを、毎度過去ログダウンロードして……は非現実的です。

twitter(X)の過去ログからはてなブログへ
twitterの検索がいまいち使えないし、自分のツイートさかのぼるのだるいし、というわけで、過去ログから毎日のツイートをまとめたブログを作りました。愛用しているはてなブログです。pythonで動かしますよ~。なぜはてなブログか埋め込みが楽ツ…

で、ブラウザを通さずデータだけ取得してうんぬん、となると有料のAPIを使う必要があります。

X API – X
Programmatic access to X with v2 REST endpoints for Posts, users, Spaces, lists, DMs, and trends, with pay-per-use prici…

個人の1日分のツイートとるくらいならそんなに料金かからないようなので、8月の長期休暇にでも挑んでみますが、そのまでの暫定処置としてPAD(Power Automate Desktop)を使おう、と。デフォルトでwindows11に入っているしね?(私のSurfaceにはインストールした記憶がないのに入っていた)

ブラウザ起動して人間と同じようにデータを見てるので、大丈夫だと思うのだけど、よくわからないので、もしかしたらアカウント凍結されるかもw 自己責任で。

プロフィール画面を開く

とりあえず起動して、フローってところで「+新しいフロー」をクリック。

左のメニューからやりたいこと選んでダブルクリックすると真ん中に追加されていく感じ。

ドラッグアンドドロップで順番変更可能。

たとえば、自分のプロフィール画面は

https://x.com/<<ユーザー名>>

これをあとでユーザー名変えるかもしれないからいったん別の箱(変数)に入れておいて、URLにくっつけてブラウザで開く、は

  1. 左の変数から「変数の設定」をダブルクリック
  2. 変数名に「userName」入力
  3. 値を「ElveWave」(自分のユーザーネーム)入力
  4. 保存
  1. ブラウザー自動化から自分が使ってるブラウザーの起動をダブルクリック
  2. 初期URLに「https://x.com/」入力し{x}をクリック
  3. userNamをダブルクリック(「https://x.com/%userName%」になる)
  4. 保存

再生を押したら、ブラウザが新しく開かれて、Twitterのプロフィール画面になる……はず。

日時の取得と時差

で私がハマったのが日付。プロフィール画面で最近の投稿は「○時間」前という表記になる。ここから正確な日時を知りたい。カーソルを時間に置くと、ツールチップで正確な時間が出てくる。これは日本時間。

取得すると「2026-07-15T02:42:22Z」って文字列になってる。UTC(世界協定時刻)だっけ? 9時間早いのよ。

で、例えば7月15日のデータだけ欲しいなら本当はこの文字列の先頭10文字取得すればいいんだけど、9時間ずれるんよ(ノД`)ナェルシク

script処理

自分のツイートだけ(リツイート除く)とか固定ツイート除く、とか諸々するのに処理をPower Shell Scriptで処理。

$ErrorActionPreference = "Stop"

# ==========================================
# 1. PAD変数の取得
# ==========================================
try {
    $userInputStr = @"
%UserInput%
"@.Trim()

    $nameStr = @"
%name%
"@.Trim()

    $postTimeUrlRaw = @"
%postTimeUrl%
"@.Trim()
} catch {
    exit
}

# ==========================================
# 2. 抽出条件の設定
# ==========================================
try {
    # 抽出対象の日付 (yyyy-MM-dd)
    $targetDate = [datetime]($userInputStr.Substring(0, 10))
    
    # 抽出対象のID (@が付与されていない場合は補完)
    $targetId = if ($nameStr.StartsWith("@")) { $nameStr } else { "@" + $nameStr }
} catch {
    exit
}

# ==========================================
# 3. リスト抽出処理
# ==========================================
$urlList = New-Object System.Collections.ArrayList
$foundTargetDate = $false

try {
    # 改行で分割し、空行を除外
    $lines = $postTimeUrlRaw -split "`r?`n" | Where-Object { [string]::IsNullOrWhiteSpace($_) -eq $false }

    foreach ($line in $lines) {
        # カンマで分割し、各要素の空白を除去
        $row = $line -split "," | ForEach-Object { $_.Trim() }

        if ($row.Count -lt 3) { continue }

        $rowDateStr = $row[0]
        $rowUrl     = $row[1]
        $rowId      = $row[2]

        # IDが一致する場合のみ日付の評価を実行
        if ($rowId -eq $targetId) {
            try {
                # UTC日時をパースし、日本時間(JST: +9時間)へ変換してから日付部分のみを取得
                $postDateTimeJst = ([datetime]$rowDateStr).ToUniversalTime().AddHours(9)
                $postDate = $postDateTimeJst.Date

                if ($postDate -eq $targetDate) {
                    # 日付が一致する場合はリストへ追加
                    [void]$urlList.Add("["+$rowUrl+":embed]")
                    $foundTargetDate = $true
                } elseif ($foundTargetDate -and ($postDate -lt $targetDate)) {
                    # 日付の一致を検知した後に、より古い日付へ到達した場合は探索終了
                    break
                }
            } catch {
                # 日付パースエラー行はスキップ
            }
        }
    }
} catch {
    # 予期せぬエラー発生時はスキップして出力処理へ移行
}

# ==========================================
# 4. 抽出結果の出力
# ==========================================
if ($urlList.Count -gt 0) {
    Write-Output ($urlList -join ",")
}

1回該当日のツイートを見つけてから、別の日付になったら終了。

これで抽出したいURL集が変数「PowershellOutput」に入る。

(続く)

処理概要

日時の取り方

  1. Webページからデータを抽出する
  2. 時間の部分を右クリック→カスタム属性
  3. 「datetime」を入力して保存
タイトルとURLをコピーしました