シャポログ

[メモ] X (旧Twitter) 備忘録

X 関連の雑多なメモ。随時追加する

検索クエリ (検索コマンド)

演算式

説明
hoge piyo hogepiyo を両方含む カレー うどん
hoge OR piyo hoge または piyo を含む ラーメン OR うどん
"hogepiyo" hogepiyo に完全一致 "カレーうどん"
(カレーうどん のみにヒットし カレーとうどん などにはヒットしない)
-hoge hoge を含まない カレー うどん -"カレーうどん"
(カレーうどん を両方含むが カレーうどん は含まない)

オプション

オプション 説明
from:ID @ID による投稿 from:shapoco
to:ID @ID への返信 to:shapoco
filter:media メディア付き (※1) from:shapoco filter:media
filter:images 画像付き from:shapoco filter:images
filter:videos 動画付き (※1) from:shapoco filter:videos
filter:links メディア (※1) またはリンク付き from:shapoco filter:links
list:リストID リスト内から検索 (※2, ※3) list:858198697032564736 カレーうどん
lang:言語コード 言語コード による言語指定 lang:ja, lang:en
since:YYYY-MM-DD 投稿日が YYYY-MM-DD 以降 from:shapoco since:2025-1-1
until:YYYY-MM-DD 投稿日が YYYY-MM-DD 以前 from:shapoco until:2024-12-31
min_retweets:N リポスト数が N 以上 from:shapoco min_retweets:1000
min_faves:N いいね数が N 以上 from:shapoco min_faves:1000
near:場所 within:距離km 場所 から 距離 km 以内 (2025/2/9: 機能してない?)
geocode:緯度,経度,距離km ジオコード の場所から 距離 km 以内 geocode:45.522192,141.936642,1km filter:media
(「最新」タブでないと機能しない?)

※1 「メディア」や「動画」には YouTube リンクも含まれる

※2 リスト ID はリストの URL の末尾の数字の部分
例) https://x.com/i/lists/858198697032564736 のリスト ID: 858198697032564736

※3 ときどき無関係なポストも混ざる模様

フォロワーの TL に流れないようにこっそりポストする

凍結済みアカウントへのリプライは基本的にフォロワーのホームタイムラインには表示されないので、目立たないようにポストしたり引用したりすることができる。

それっぽい ID の凍結済みユーザーの例: (2025/04/05 現在)

注意点:

通知を送らずに引用する

例えば対象ポストの URL が https://x.com/shapoco/status/1897261591160328414 の場合は https://x.com/i/web/status/1897261591160328414 のような URL に整形して引用する。(2025/04/05)

ユーザー ID

一般的に「ID」と呼ばれているもの (@shapoco など) は正式には screen name という。

「ユーザー ID」は screen name と関係無くアカウントを一意に識別する数字。例えば @shapoco のユーザー ID は 858142314849378304。screen name は変更できるが、ユーザー ID は変更できない。

何のためか分からないが https://x.com/i/user/ユーザーID がそのユーザーのプロフィールページへ転送されるようになっているので、ユーザー ID から screen name は簡単に分かる ()。

screen name からユーザー ID を得るのは以前は API を使うことができたが、今は有料化されてやや難しくなっている。

外部サービス利用してユーザー ID を取得する

プロフィールページの DOM からユーザー ID を取得する (Web版)

  1. data-testid="UserProfileSchema-test" なる属性を持つ script 要素を見つける (複数存在する場合がある)。
  2. innerText を JSON としてパースする。
  3. (JSON obj).mainEntity.additionalName が目的の screen name に一致することを確認し、一致しない場合は次の script 要素を調べる。
  4. screen name が一致する場合、(JSON obj).mainEntity.identifier にユーザー ID が格納されている。

上記手順をブックマークレット化した。

  1. 以下のコードを URL としてブックマークレットを作成する

    javascript:(function(){try{const sn=window.location.href.match(/x\.com\/(\w+)(\/(with_replies|media)\/?)?(\?.+)?$/)[1];const ss=Array.from(document.querySelectorAll('script')).filter(elem=>elem.dataset&&elem.dataset.testid==='UserProfileSchema-test');for(const s of ss){const e=JSON.parse(s.innerText).mainEntity;if(e.additionalName!==sn) continue;const url=`https://x.com/i/user/${e.identifier}#${sn}`;console.log(`URL: '${url}'`);navigator.clipboard.writeText(url).then(function(){window.alert(`URL copied to clipboard:\n${url}`);},function(){window.alert(`URL: '${url}'\n(Failed to copy to clipboard)`);});return;}throw new Error(`User ID not found for ${sn}.`);}catch(e){window.alert(`Failed. (${e})`);}})()
  2. 対象ユーザのプロフィールページを開く
  3. 作成したブックマークレットを開く
    ( https://x.com/i/user/<user ID>#<screen name> の形式でクリップボードにコピーされる)

(2025/03/18 更新)

フォローボタンの属性からユーザー ID を得る (Web版)

フォローボタン (button 要素) の data-testid 属性が正規表現 /(\d+)-(un)?(follow|block)/ にマッチする場合、(\d+) の部分がユーザー ID にあたる。

こちらの方法だと、フォロー一覧/フォロワー一覧/アカウント検索結果などのページから、そこに表示されているユーザーの ID をまとめて得られる。

(2025/03/18 更新)

細々したの

プロフィールの改行

Web 版のプロフィール編集画面で改行を使うと Web 版には反映されるが、アプリでは半角スペースになる。(2025/03/19)

Twitter Card Validator

Card Validator | Twitter Developers

プレビューは機能していないが、OGP 画像の更新自体は機能する。(2025/02/22)

メディア欄の空白は YouTube のリンク

メディア欄にところどころある空白は YouTube のリンクの投稿。

from:自分のID filter:media で検索すると、メディア欄で空白だったところに YouTube のリンクが貼られた投稿があるのが分かる。

「自分がメンバーとなっているリスト」が数件しか表示されない (PC)

どれかのリストを開いたあとブラウザバックすると続きが表示される。バグ?