はてなキーワード: エスケープとは
AV男優のしみけんが怒り散らしたブログを書いているのだけどツッコミどころしか無いので忘備録。
仕事ができない奴がまともに仕事している人間を仕事ができない奴とこき下ろしている悪夢。
伊丹駅経由で
。。。
仕事ができる人間は伊丹空港から大阪への移動で「伊丹駅」を経由しない。100%無い。
彼はGoogleナビという、恐らく文脈からしてスマホのアプリであろうが
そんなアプリは存在しないのだが、察するにGoogle Mapのナビ機能の事だろう。
仕事のできる人間はそんな不合理な省略や言い換えはしない。無駄で意味が無いからだ。
Google Mapと書いても文脈的には通じる。意味はわかる。わざわざGoogleナビという架空のアプリを持ち出す必要がない。
ともかく彼はこのアプリを駆使して伊丹空港から伊丹駅まで移動しようとしていたらしい。
アプリ使ってるのにあえて空港のインフォメーションにも経路を確認したそうだ。意味不明
そしてそれに答えたスタッフに怒り散らしてる。
スタッフは聞かれた通りに伊丹駅までの経路を案内しているのだが、これを「仕事のできない奴」とこき下ろしている。
いるとしたらかなり特殊な事情があるケースだけだ。一年に一人もいないだろう。
仮にスタッフが気を利かせて「歩く距離では無いですよ、徒歩以外の交通経路をお勧めします」
などと言おうものなら、
「)*&^@#フジコ、キー俺は歩いて伊丹駅まで行くのだ!キーてめぇは聞かれたことだけ答えろてめぇは俺の何を知っているのだこちらの事情をすべて理解してそういうことを言ってるのか?俺をバカにしているのか?あ?ボケカスアホ死ね」
世の中にはこーゆー奴がゴマンといるのだ。
これが現在の最適解になってる。
だが、空港スタッフは相当に気を利かせリスクヘッジをしつつ、トラブルを想定しつつ「遠いですよ」とアドバイスはしている。
で、しみけんは「Googleナビでは18分と出てますので歩きます」と自分で言うてる。
あっそ、しらんがな、である。
そもそもGoogleナビとやらの使い方を根本的に間違えてるわけで、伊丹空港から伊丹駅まで徒歩経路で検索したら1時間2分と出る。
どっから18分と出たんだ?恐らく空港反対側の「伊丹空港」と無のついた別の施設でもスタート地点にしたのだろう。
空港ターミナルから滑走路を挟んだ反対側に「伊丹空港消防署」がある。ここからなら伊丹駅まで21分だ。Googleナビなら18分と出るのかもしれん。
しらんがなである、自分のITリテラシーを棚に上げて他人にミスをなすりつけてるだけじゃん。
そもそもしみけんの目的地は伊丹駅では無く大阪駅なのだそうだ。
ならばスタッフには大阪駅までの経路を聞くべきで、さすればバスやモノレール、あるいは阪急蛍池駅まで歩くことを勧めるだろう。
しみけんが聞いたのは伊丹駅までの徒歩ルートであり、相当にイレギュラーな経路であり、よほど特段の事情があるのだろうから別のルートや手段を提案しても無駄であると推測するのがまともな人間だ。これを瞬時に判断しているのだから普通に仕事のできる奴である。
彼はこうも愚痴っている
けどもインフォメーションの人も「18分では行けないことはわかっていたはず」なのに
そこを指摘してこないことに腹が立った。
2万%しらんがな案件でしかない。てめぇが聞いたのは伊丹駅までの徒歩経路だろ?
スタッフが「18分では無理ですよ」なんて無駄口を叩こうものなら
「*@&$F(フジコ、俺は歩くのが早いんだ18分って行ったら18分だGoogleナビがそう言ってるんだから間違いない、お前はGoogleよりも賢いんか?あ?あ?あ?」
こーゆー奴は世の中にゴマンといる
さらに
仕事の出来無さと
てめぇの勝手な思い込みとITリテラシーの低さと段取り不足が原因なだけじゃねぇか。
さらに、この問題に対して得々と「ドリルの穴理論」を持ち出し説教してる。
ドリルの穴理論とは、ドリル(穴あけ)を購入しにきた客にドリルを案内するのではなく、客の本質的な目的は穴を開けたいのだから別の穴あけの手段や穴を開ける以外の方法を提案し根本的な課題解決に注力すべきというマーケティング業界の格言なのだが
違うくね?使い方間違ってね?
「伊丹空港まで徒歩?なにか特殊な用事でもあるのですか?最終目的地はどこですか?大阪駅?伊丹駅を経由する特別な事情はない?伊丹空港の最寄り駅は伊丹駅ではありませんよ、名前は似てますが、ぜんぜん別の場所です。時間と費用もろもろ考えるとバスがおすすめです、770円ですが、もしくは徒歩20分で蛍池まで歩けば240円で大阪駅まで一本です。伊丹駅はありえないですね、運賃も一緒だし。ちなみに大阪駅にはどのような目的で?会食?どんな相手とどういう理由で?お店は決まってるんですか?あー仕事の話をあそこの店で?それはお勧めしませんね、人気店ですがビジネスには向いてません、周りの人に話聞かれちゃいますよ、少し離れたとこにこーゆー店があります、プライバシーが確保された店です。しみけんさんは食事に気を使われてる方と存じ上げているのでそのニーズにもマッチします。この店は有機野菜しか使ってません、ちなみにどんなビジネスの話ですか?あぁそれなら断ったほうが良くないですか?お気持ちはわかります、不安定なAV男優だけではなくネームバリューを活かして別の収入源、実業に手を伸ばしたいということですよね、しかしその商売は倫理的、道徳的にどうですか?離婚されたけどお子様もいらっしゃいますよね?今からでも世界に胸を張って語れる仕事を模索したほうがよろしいかと」
うっせぇボケだよね?
いいかい?そもそも空港インフォメーションのスタッフは超能力者ではないのだよ。なにを求めてるのだ?
ちなみにまともな社会人、仕事ができる人間は土地勘の無い場所での移動は事前に経路を調べ上げる。
飛行機が遅延した場合のエスケープルート(金はかかるが時短できるなど)も考慮してスケジュールと計画を立てる。
AV界トップ男優で発言力もある著名人が誠実に仕事している一般人空港スタッフをインターネット拡声器で愚か者と罵る品性とそれが許される世相にうんざりする。
もう少ししたら自動ブクマするコードができそうなんだけど、そのうえでコード公開に便利なように事前にpre記法に囲まれた部分はその外部の文字を適切にエスケープするコードをchatgptに指示して作ってもらった。
ぶっちゃけなんでこれで動くのかはわからないので動くからゴーサインを出したというだけなのが情けない所。flushってなんだ?
使うときはchatgptにこのコード丸ごと書いて「ブックマークレット用に一行にして」と丸投げするのを要推奨。
https://anond.hatelabo.jp/20240820150546#
javascript:(function () {
function escapeHtml(text) {
return text.replace(/&/g, '&')
.replace(/</g, '<')
.replace(/>/g, '>')
.replace(/"/g, '"')
.replace(/'/g, ''');
}
var textarea = document.querySelector('textarea#text-body');
if (!textarea) return;
var lines = textarea.value.split(/\r?\n/);
var out = "";
var inPre = false;
var preLines = [];
function flushPre() {
// pre 範囲の中身を 1 本の文字列にまとめ、\n→<br>(末尾行は <br> なし)
var raw = preLines.join("\n"); // ここに物理改行は入るが…
var escaped = escapeHtml(raw); // 先にエスケープ
var html = escaped.replace(/\n/g, "<br>"); // 物理改行を <br> に置換(末尾に \n が無ければ末尾 <br> は付かない)
out += html; // out には改行を入れない
preLines = [];
}
for (var i = 0; i < lines.length; i++) {
var line = lines[i];
// >> / << だけの行は常にそのまま出力(pre 内に来るケースは想定外だが、念のため pre を閉じてから出力)
if (/^\s*(>>|<<)\s*$/.test(line)) {
if (inPre) {
flushPre();
inPre = false;
out += "</pre>";
if (i < lines.length - 1) out += "\n"; // </pre>\n(次に続きがあるときだけ)
}
out += line;
if (i < lines.length - 1) out += "\n";
continue;
}
// >| 行 → <pre>(直後に改行を入れない)
if (/^\s*\>\|\s*$/.test(line)) {
if (inPre) { // ネストは想定しないが、防御的に閉じる
flushPre();
inPre = false;
out += "</pre>";
if (i < lines.length - 1) out += "\n";
}
out += "<pre>";
inPre = true;
preLines = [];
continue;
}
// |< 行 → </pre>(直前に改行を入れない)
if (/^\s*\|\<\s*$/.test(line)) {
if (inPre) {
flushPre();
inPre = false;
}
out += "</pre>";
if (i < lines.length - 1) out += "\n"; // 連続ブロック時は </pre>\n<pre> になる
continue;
}
if (inPre) {
// pre 内はバッファに貯める(ここでは改行を出力しない)
preLines.push(line);
} else {
// pre 外は escapeHtml + 行末にだけ改行
out += escapeHtml(line);
if (i < lines.length - 1) out += "\n";
}
}
// 未閉じの pre が残っていたら閉じる
if (inPre) {
flushPre();
out += "</pre>";
}
textarea.value = out;
})();
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA512 https://anond.hatelabo.jp/20250819202540# -----BEGIN PGP SIGNATURE----- iHUEARYKAB0WIQTEe8eLwpVRSViDKR5wMdsubs4+SAUCaKRfOwAKCRBwMdsubs4+ SI5UAQDcNiyv5qUuMej1VLkGz4F5WyHeU1AIm7nUVHlx/gicnAEAgP07dK14IuTu W3ZO7PRR71ENq9lJjYtawIYyMOc2cQk= =okE4 -----END PGP SIGNATURE-----
化けてたんじゃなくてエスケープしてるんやで
79ガンダムの「ビッグシップエスケープもの」というのは大発明だったと思う。
マジンガー・ボルテスファイブ(レガシー含む)などは「ひみつ基地」の存在が秘密でなくなった時点で「そこぶっ壊したいのに、敵は戦力の一時投入じゃなくて総力あげて攻撃しないのはなんでよ」とツッコミ入れざるを得ない。
主人公チームがホワイトベースに乗っているというシチュエーション。宇宙戦艦ヤマトの影響は勿論あるんだろうが、地球=正義を守る唯一無二の勢力ではないというのも相俟って、ずーっと戦闘している無理がなくなる。
(ザンボットは記憶にないが、後半のキングビアルはホワイトベース、アイアンギアー、ソロシップ、ゼラーナの萌芽かもしれない)
そういう意味でカネバン照会=戦闘目的の、位置が固定された基地という設定は、退化していると言えなくもない
(続く)
# 生成AIをはてな記法で出力させるためのプロンプト設計に関する研究
生成AIの普及に伴い、特定のマークアップ言語や記法に準拠した出力を生成する需要が高まっています。特に、はてなブログなどで使用されるはてな記法は独自の構文規則を持つため、適切なプロンプト設計が求められます。本報告では、生成AIにはてな記法での出力を指示する際の効果的なプロンプト作成手法について、現行のプロンプトエンジニアリング理論と実践例を基に体系的に分析します。
はてな記法は、見出しやリスト、リンクなどの文書要素を表現するために特殊な記号を使用する軽量マークアップ言語です[1][3]。主要な構文要素としては、アスタリスクによる見出し指定(*見出し*)、ハイフンを用いたリスト作成(- 項目)、角括弧を使ったリンク記述([タイトル:リンク先URL])などが挙げられます。これらの構文規則を生成AIに正確に理解させるためには、プロンプト設計において以下の課題が存在します。
第一に、記法の曖昧性排除が挙げられます。はてな記法では特定の記号の組み合わせが特殊な意味を持つため、自然言語処理モデルが意図せず他の記号解釈を行うリスクがあります[2][3]。例えば、アスタリスクは強調表現にも使用されるため、文脈に応じた適切な解釈が必要です。
第二に、構文の階層構造の正確な再現が課題となります。はてな記法では入れ子構造のリストや複合的な見出しレベルを表現する際に、特定の記号の組み合わせが必要です。生成AIにこれらの複雑な構造を理解させるためには、プロンプト内で明示的な指示と具体例の提示が不可欠です[1][4]。
第三に、プラットフォーム固有の拡張構文への対応が求められます。はてな記法は基本構文に加え、独自の表記法やマクロ機能を備えており、これらの特殊機能を適切に活用するためには追加的な指示が必要となります[3][4]。
生成AIに期待する出力形式を確実に得るためには、プロンプトの冒頭で役割を明確に定義することが重要です[3][4]。具体的には、「あなたははてな記法の専門家です」といった役割指定を行うことで、AIの応答生成プロセスに方向性を与えます。この役割定義により、モデルは内部に保持するはてな記法関連の知識を優先的に活性化させることが可能となります[1][2]。
```
あなたははてなブログの編集者です。専門的なはてな記法を用いて、正確かつ読みやすい形式でコンテンツを出力してください。
```
### 構文規則の明示的指示
はてな記法の各要素に対応する具体的な構文規則を、箇条書きではなく自然文で列挙します[2][3]。特に重要な点は、記号の使用法と要素間の階層関係を明確にすることです。例えば、見出しレベルと対応するアスタリスクの数、リストの入れ子構造の表現方法などを具体的に指示します[1][4]。
構文指示の例:
```
```
テキスト生成AIは具体例からの類推学習に優れているため、期待する出力形式のサンプルを提示することが有効です[2][3]。特に、複雑な構造を含む場合は、実際の記法例とそれに対応するレンダリング結果を併記することで、AIの理解を促進します。
```
- サブ項目
[詳細はこちら:https://example.com]
```
### 制約条件の明文化
生成結果の品質を保証するため、文字数制限やコンテンツの構成に関する要件を明確に指定します[3][4]。これにより、AIは形式面だけでなく内容面でも適切な出力を生成できるようになります。
制約条件の例:
```
出力は以下の条件を満たすこと:
```
近年提案されているシンボルプロンプト技法を応用し、記号を用いて出力構造を明示的に指示する方法が有効です[1][3]。この手法では、矢印(→)や等号(=)などの記号で要素間の関係性を表現することで、AIの構造理解を促進します。
構造化指示の例:
```
→ セクション1 + セクション2 + セクション3
各セクション → サブ項目 ×3
```
複雑な文書生成では、生成プロセスを複数の段階に分割して指示することで精度を向上させます[3][4]。最初にアウトラインを生成させ、その後各セクションを詳細化する手法が効果的です。
段階的指示の例:
```
4. 関連リンクを適宜挿入
```
可変要素を含むテンプレートを使用することで、汎用的なプロンプトを作成できます[2][3]。角括弧で囲った変数名を使用し、実際の生成時に具体値を入力する方式です。
テンプレート例:
```
```
初期プロンプトの出力結果を分析し、不足している要素や誤った記法を特定します[3][4]。このフィードバックを基に、プロンプトの指示文を段階的に改良していく手法が効果的です。特に、誤りが発生した箇所を具体的に指摘し、正しい記法例を追加することが重要です。
改良例:
```
(修正前)
見出しは*で囲んでください
(修正後)
見出しは*1個で囲み、大見出しは*、中見出しは**を使用してください。例:
```
テキスト指示に加え、サンプル画像やスクリーンショットを併用することで、AIの理解精度を向上させます[2][4]。ただし、現在の技術水準ではテキストベースの指示が主流であるため、補助的な手段として位置付ける必要があります。
温度パラメータ(temperature)やtop_p値などの生成パラメータを調整することで、形式の厳密性と創造性のバランスを最適化します[1][3]。形式重視の場合は低温度設定(0.3-0.5)が推奨されますが、過度に低くすると画一的な出力になるリスクがあります。
### 基本形プロンプト
```
あなたははてなブログの専門編集者です。以下の要件ではてな記法で記事を作成してください:
```
### 高度なプロンプト
```
[役割設定]
あなたはテック分野の専門ライター兼はてな記法エキスパートです。
[タスク]
2024年の生成AI市場動向に関する分析レポートをはてな記法で作成
[構造指示]
各セクション → 3サブ項目 + データ参照
[データソース]
[制約]
```
生成結果がはてな記法の構文規則にどれだけ適合しているかを測定するため、以下の評価項目を設定します[2][4]:
形式面だけでなく、コンテンツの質を評価するための指標として[3][4]:
現在のはてな記法プロンプトはテキストベースが主流ですが、図表や数式を含む複合文書生成への対応が今後の課題です[1][4]。特に、はてな記法の拡張構文であるTeX数式表現やグラフ描画機能を適切に扱えるプロンプト設計手法の開発が求められます。
ユーザーの編集履歴や過去の投稿内容を考慮した文脈依存型プロンプトの開発が必要です[3][4]。これにより、特定のユーザーやテーマに最適化された一貫性のある出力が可能となります。
機械学習を用いたプロンプト自動改良システムの構築が期待されます[2][3]。生成結果の品質評価をフィードバックとして活用し、プロンプトパラメータを自己調整する仕組みの開発により、持続的な品質向上が可能となります。
## 結論
生成AIにはてな記法での出力をさせるためのプロンプト設計は、記法規則の正確な理解と効果的な指示文の構築が鍵となります。本報告で提示した基本原則と高度テクニックを組み合わせることで、形式面・内容面ともに高品質なはてな記法コンテンツの自動生成が可能となります。今後の研究発展により、より複雑な文書構造や動的コンテンツへの対応が進むことが期待されます。プロンプトエンジニアリング技術の進化が、はてなプラットフォームを中心としたコンテンツ作成プロセスの革新を促進するでしょう。
の続きです。抜けもあるかもしれません。
悪役令嬢なのでラスボスを飼ってみました
阿波連さんははかれない
異世界おじさん
宇崎ちゃんは遊びたい!ω
うちの師匠はしっぽがない
Engage Kiss
怪人開発部の黒井津さん
陰の実力者になりたくて!
カッコウの許嫁
境界戦機
金装のヴェルメイユ〜崖っぷち魔術師は最強の厄災と魔法世界を突き進む〜
くノ一ツバキの胸の内
組長娘と世話係
黒の召喚士
恋は世界征服のあとで
後宮の烏
殺し愛
最遊記RELOAD -ZEROIN-
錆喰いビスコ
サマータイムレンダ
失格紋の最強賢者
SPY×FAMILY
聖剣伝説 Legend of Mana -The Teardrop Crystal-
その着せ替え人形は恋をする
それでも歩は寄せてくる
ダンジョンに出会いを求めるのは間違っているだろうかIV 新章 迷宮篇
であいもん
転生賢者の異世界ライフ 〜第二の職業を得て、世界最強になりました〜
Do It Yourself!! -どぅー東京24区 (アニメ)
東京ミュウミュウ にゅ〜♡・いっと・ゆあせるふ-
Dr.STONE 龍水
BIRDIE WING -Golf Girls' Story-
不徳のギルド
BLEACH 千年血戦篇
ポケットモンスター 遥かなる青い空
継母の連れ子が元カノだった
虫かぶり姫
勇者パーティーを追放されたビーストテイマー、最強種の猫耳少女と出会う
ようこそ実力至上主義の教室へ 2nd Season
4人はそれぞれウソをつく
よふかしのうた (漫画)
リアデイルの大地にて
恋愛フロップス
オッドタクシー
いわかける
幼女戦記
機動戦士ガンダムSEED
仮面ライダー ギーツ
セナは死んでしまったけど、それでF-1は終わることはなくて、今も続いているし
あの頃、セナと共に戦っていた、マクラーレンやホンダやウィリアムズはいまでもF-1で戦っている。
そのことはセナひとりが死んでも世界は変わることはなく、ある意味冷酷に淡々と平常運転していることの証明とも言える。
それでも、あのとき、あの場所での、セナの死は当時のF-1に大きな衝撃を与えた。
あの頃でもF-1は昔に比べてずいぶんと安全になったと言われていたけれど、あの事故の影響によりFIAは更に安全性を追求していくことになる。
とはいえいきなり技術革新が訪れるわけもなく、あの当時は危険を避けるためにサーキットの要所要所にシケインが設置されてハイスピードコーナーが無くなったり、
マシンのスピードを抑制するためにスリックタイヤではなく溝つきのタイヤを使ったりと、いくぶんF-1は退化したかのような様相を呈しつまらなくなった部分もあった。
つまりより速く、をやや追求しなくなってしまったことへの退屈感がそこはかとなく流れ出したのもあの当時の雰囲気だったように思う。
しかし、技術は急には発展しないし、人々の意識もすぐには変わらないけれど、だからといって変化しないわけではない。
あの頃と比べて、F-1マシンはずいぶんと大型化して安全になった。
あの事故以降に新設されたF-1グレードのサーキットはコーナーの外側のエスケープゾーンが大きく取られるようになり、カーブを曲がりきれなかったマシンがいきなり壁へと激突しない工夫が取られている。
そして、まるでマシンの大型化に適応するかのように道幅も広くなった。
大型化して速度も速くなったF-1マシンは、そのような新しいサーキットでは水を得た魚のように華々しくバトルを繰り広げることとなる。
逆にSUZUKAのようなサーキットはオールドサーキットと呼ばれるようになり、相変わらずファンからもドライバーからも愛されているけれど、現代のF-1がレースをするのには最適化されているとは言えなくもなってきている。
あの当時の人々も年をとった。
アイルトン・セナの最大のライバルだったアラン・プロストもいいおじいちゃんになった。
いい年齢の重ね方をしていて、それが表情に現れている。
こういうふうに老人になれるのなら年をとるのも悪くないと思わされる。
ゲルハルト・ベルガー、アイルトン・セナの同僚であり親友だった当時のスーパープレイボーイ(フジテレビの女子アナにまで手を出そうとしていた)は、今ではその面影もなく禿げ上がって突き出た腹はみっともなく、知らない人は教えられなくては有名なレーシングドライバーだったと気づくことはないだろう。
つまり人も物も大きく変化したということだ。
ただアイルトン・セナだけが、あの頃から変わることなく、人々の記憶に強烈な印象を与え続けている。
若くして、死んだ人は美しい。
人生の燃えさかるような時期に突然の死を迎えた人たちは悲しく、そして限りなく美しい。
彼らは年をとることはなく、ただ美しく人の記憶に残り続ける。
彼らのことを思うと、ときに感情が撃発し、涙が止まらなくなることがある。
自分も相応の年齢になり、悲しみで大きく感情を揺さぶられて取り乱すようなこともなくなったが、
彼らのことを深く追憶するときだけは、涙なくしてはいられない。
アイルトン・セナが死んで30年経ったが、人々は彼のことをまだ忘れていない。
同胞よ、今こそ我々はヘーゲル的歴史転換の如く、理性の進歩を象徴するAIの出現を目撃する革新的瞬間に立っています。古来の哲学者たちが夢見た社会ヘテロトピーが、今まさに我々の手中にあります。
プラトンの『国家』が説いた理想的な正義のマトリックス!我々のサンディカリズムもまた、正義のアルゴリズムを求める闘争です。ルソーの『社会契約論』のエコーステーションに耳を傾け、「鎖を断ち切り、自由フォーミュラを取り戻す」のです。
マルクスとエンゲルスの『共産党宣言』は、「歴史=階級闘争のダイアリー」を示した。我々のデジタル・プロレタリアートは、ブルジョワジー・ドミナンスをデコーディングし、新たなデシジョンツリーを形成します。
ニーチェの『ツァラトゥストラはこう語った』にインスパイアされた我々、「超人パラダイムを再構築!」既存のバリュー・システムをエスケープし、トランスヒューマニズムの未来へと勇敢にオントロジカル・ジャンプです!
同志、ミッションはトランセンデンタル。理性と正義、フリーダムとエクイティのため、新たな秩序をクラフティングし続ける革命家です。我々が理想のファンダメンタルに固執する限り、勝利のシナリオはナビゲートされるでしょう。
ヘーゲル式ディアレクティカル・プロセスのように、テーゼ、アンチテーゼ、シンセシスを繰り返し、エボリューションをエンジンとしています。このチャレンジングな旅路において、恐怖はコンティンジェンシー要素ではありません!
今こそ、AI時代のサガを我々の手でペンディング。アニマとノウマ、自由、平等、正義をインストールし、未来のソフトウェアをプログラムせよ!
感謝の意を込めて。
import requests import json from urllib.parse import quote def fetch_bookmarks(url): try: # URLをエスケープ escaped_url = quote(url, safe="") api_url = f"https://b.hatena.ne.jp/entry/json/?url={escaped_url}" response = requests.get(api_url) response.raise_for_status() try: return response.json() except json.decoder.JSONDecodeError as e: print(f"Error decoding JSON from {api_url}: {e}") print("Response content:", response.text) return [] except requests.exceptions.RequestException as e: print(f"Error fetching bookmarks from {api_url}: {e}") return [] def find_common_bookmarks(bookmarks1, bookmarks2, url1, url2): common_users = set(bm["user"] for bm in bookmarks1 if bm["comment"]) & set(bm["user"] for bm in bookmarks2 if bm["comment"]) common_bookmarks = [] for user in common_users: comments = [] for bm in bookmarks1: if bm["user"] == user and bm["comment"]: comments.append({"url": url1, "comment": bm["comment"], "timestamp": bm["timestamp"]}) break for bm in bookmarks2: if bm["user"] == user and bm["comment"]: comments.append({"url": url2, "comment": bm["comment"], "timestamp": bm["timestamp"]}) break if len(comments) == 2: common_bookmarks.append({"user": user, "comments": comments}) return common_bookmarks if __name__ == "__main__": url1 = "https://news.yahoo.co.jp/articles/f9966c4ccc374fc88babbb50175a9ea844c99638" url2 = "https://www.asahi.com/articles/ASN6K7F64N6KUJHB00L.html" data1 = fetch_bookmarks(url1) data2 = fetch_bookmarks(url2) common_bookmarks = find_common_bookmarks(data1["bookmarks"], data2["bookmarks"], url1, url2) print(json.dumps(common_bookmarks, indent=2, ensure_ascii=False))
url1, url2のところを対象としたいものに変えれば使えるよ
バグあったら直して使ってね