Ghost の Amazon リンクカードをなおす(1)

このブログは Ghost (Pro)というホスティングサービスを使っている。Ghost 自体はオープンソースのブログシステムで、それをフルマネージドで使えるサービスが Ghost (Pro) だ。

Ghost: The best open source blog & newsletter platform
Beautiful, modern publishing with email newsletters and paid subscriptions built-in. Used by Platformer, 404Media, Lever News, Tangle, The Browser, and thousands more.
GitHub - TryGhost/Ghost: Independent technology for modern publishing, memberships, subscriptions and newsletters.
Independent technology for modern publishing, memberships, subscriptions and newsletters. - TryGhost/Ghost

一つ前の記事でも言及したが Ghost で書いた記事に Amazon リンクを貼り付けると​カードが作成されるのだが、商品の画像が表示されない​問題がある。たとえばこんな感じ。

アフィリエイトを狙っているわけではないので不利益はないんだけど、単にかっこわるいというか、見栄えが悪いなぁと思ってなんとかしたいと感じていた。すでに問題としては認識されいてフォーラムに Issue をたてている人はいるのだけど、すでに4年間も放置されていて Ghost 側でなおす雰囲気はなさそうだ。

Images not visible in amazon link cards
naturanovit.net I use ghost pro, so assuming it’s the latest version Using the casper theme 4.1.1 I’m trying to include third party links in my post, including some amazon affiliate links. Here it is: Site unavailable (amazon link on the bottom) I just copied and pasted the links in the editor. For most non-amazon sites, you can see that the links auto-formatted to look quite nice, including an image. Their height is capped, etc. However, the amazon links look terrible. No image, and som…

フォーラムでも文句書いてる人がいたけどブログサービスとしてこれはけっこう致命的ではないか?とは思った。とはいえ、中の人が

Any PRs to Ghost or the upstream packages that improve the Amazon situation are very welcome 🙏

と書いていてたまには自分で直してみるかと思いコードをすこし眺めてみた。もしかしたら、なんとかなりそうな気もしてきたので対応してみることにした。

Metascraper を調べる

Ghost ではカードのためのメタデータは Metascraper というライブラリをつかっているらしい。それがこれ。

Metascraper: unified metadata from the web
Open Graph, Microdata, RDFa, Twitter Cards, JSON-LD, HTML, and more.

まずはこの Metascraper 単体で動作させてみて Amazon のメタデータがうまくとれるのかどうかを試してみる。調べてみると Metascraper には Amazon 用の package (plugin 的なものかな)もあるようだけど『それがあまりいい結果ではなかった』いうのが中の人の報告だった。また、関連する github issue もあって『これのせいでおかしいんだよ~』って話でまだ open のまま。とはいえ、これも数年前の issue だし改善してそうな気もする。まずは check out して Metascraper を動かしてみる。

--

手元で metascraper をただ動かすだけのコードを書いて試してみた。結果としてmetascraper-amazon package を使えば意図通りに動いているように思えた。例えばさきほどスクリーンショットした「三体Ⅲ」のリンクの metadata は次のようになっていた。

{
  lang: null,
  author: '劉 慈欣 (著), 大森 望 (翻訳), 光吉 さくら (翻訳), ワン チャイ (翻訳), 泊 功 (翻訳) & 2 その他 形式: Kindle版',
  title: '三体3 死神永生 上 (ハヤカワ文庫SF)',
  publisher: 'Amazon',
  image: 'https://m.media-amazon.com/images/I/81ATPl9QRHL._SL1500_.jpg',
  date: '2025-03-05T14:00:55.000Z',
  description: 'Amazon.co.jp: 三体3 死神永生 上 (ハヤカワ文庫SF) eBook : 劉 慈欣, 大森 望, 光吉 さくら, ワン チャイ, 泊 功: 本',
  logo: 'https://logo.clearbit.com/amazon.co.jp',
  url: 'https://www.amazon.co.jp/...(省略)'
}

image としてとれる URL にアクセスすると正しく本の画像が表示されている。

ただいろいろ動かして気づいたのが metascraper に与える package の順序で優先度が決まるため amazon のpackage を一番後ろにすると metadata がおかしくなった。

{
  date: '2025-03-05T14:03:37.000Z',
  description: 'Amazon.co.jp: 三体3 死神永生 上 (ハヤカワ文庫SF) eBook : 劉 慈欣, 大森 望, 光吉 さくら, ワン チャイ, 泊 功: 本',
  image: 'https://fls-fe.amazon.co.jp/1/batch/1/OP/A1VC38T7YXB528:356-1395144-8046230:KYE8M6D304DCB9AJWKRV$uedata=s:%2Frd%2Fuedata%3Fstaticb%26id%3DKYE8M6D304DCB9AJWKRV:0',
  logo: 'https://logo.clearbit.com/amazon.co.jp',
  publisher: 'Amazon',
  title: 'B0D6R268BJ?...(省略)',
  author: 'フォロー'
}

もしやこれに気づいてなくて package list の一番うしろ metascraper-amazon をいれてしまって「metadata がおかしかった」と思っていたただけなのでは?この部分の一番後ろにいれてしまって「おかしい」と思ってたのかな。

Ghost/ghost/core/core/server/services/oembed/OEmbedService.js at main · TryGhost/Ghost
Independent technology for modern publishing, memberships, subscriptions and newsletters. - TryGhost/Ghost

package は URL によって対象を決定する仕組みもあるので、一番上にいれても amazon 以外のドメインでなければ適用されないはず。というわけで、単に一番上に metascraper-amazon の package をいれるだけでいいように思えた。

次は実際に Ghost を check out してローカルで動かしてみる。再現確認できたら issue にしてまたここに記録を書きます。

Read more

『ヒルビリー・エレジー』、『教養としての金利』、『正しい家計管理』

いくつか本を読んだので感想を書いておく。 ヒルビリー・エレジー(J・D・ヴァンス著) Amazon.co.jp: ヒルビリー・エレジー~アメリカの繁栄から取り残された白人たち~ (光文社未来ライブラリー) eBook : J・D・ヴァンス, 関根 光宏, 山田 文: KindleストアAmazon.co.jp: ヒルビリー・エレジー~アメリカの繁栄から取り残された白人たち~ (光文社未来ライブラリー) eBook : J・D・ヴァンス, 関根 光宏, 山田 文: Kindleストアフォロー J・D・ヴァンスというアメリカ人が自分の生い立ちについて語った回想記。彼の故郷がアメリカの「ラストベルト」だったことが話題となり「アメリカの実情をかたる本」としてベストセラーとなった。その後は彼は上院議員になり、今やアメリカ合衆国の副大統領となった。 彼は高校を卒業し海兵隊に行き、州立大学を卒業後にイェール大学のロースクールを修了している。その後、

小学生の子供に Apple Watch を持たせて感じたこと

小学生の子供との連絡用にセルラー Apple Watch を持たせた話シリーズ。持たせるようにしてから3ヶ月ちょっと経つので感じたことを書いておく。 過去記事は👇からどうぞ。 小学生の子供に Apple Watch を持たせた小学生の子供との連絡用に Apple Watch SE2 持たせるようにしました、という話。 みまもり GPS 小学校に入学してからみまもりのために GPS を持たせていた。使っていたのはみてねのみまもりサービス。月額500円くらい。 【公式】みてねみまもりGPS-CMで話題!子どもを見守るGPS2023年新規利用者数No.1。みてねの子供向けGPS端末。長持ちバッテリー搭載で最大2ヶ月充電不要。最高水準の位置情報精度で登下校の移動履歴、出発到着の通知をスマホで簡単に見守り。簡単操作のお知らせボタン付き(第3世代)で緊急時も安心安全。未就学児から小学生の子供まで持ち運びしやすい小型で精度の高いGPSトラッカー「みてねみまもりGPS」家族アルバム みてね これはなかなか使い勝手がよくてアプリの出来や位置の精度含めて不満はなかった。ただ、子供が高学年にさしかかって

Apple Watch で au ウォッチナンバープランを契約する

小学生の子供に Apple Watch を持たせた小学生の子供との連絡用に Apple Watch SE2 持たせるようにしました、という話。 みまもり GPS 小学校に入学してからみまもりのために GPS を持たせていた。使っていたのはみてねのみまもりサービス。月額500円くらい。 【公式】みてねみまもりGPS-CMで話題!子どもを見守るGPS2023年新規利用者数No.1。みてねの子供向けGPS端末。長持ちバッテリー搭載で最大2ヶ月充電不要。最高水準の位置情報精度で登下校の移動履歴、出発到着の通知をスマホで簡単に見守り。簡単操作のお知らせボタン付き(第3世代)で緊急時も安心安全。未就学児から小学生の子供まで持ち運びしやすい小型で精度の高いGPSトラッカー「みてねみまもりGPS」家族アルバム みてね これはなかなか使い勝手がよくてアプリの出来や位置の精度含めて不満はなかった。ただ、子供が高学年にさしかかってきて習い事や塾、友達と遊びに行くという機会が増えてきたので、通話したりメッセージをやりとりしたくなってきた。というわけで、うちもそろそろスマホかケータイか何か持たせた方がいいかなと

ブログを始めて10年経った

ブログを始めて 10 年経った。 この日のことはなんとなく覚えていて、iPhone 5 ではてなブログのアカウントを作ってこの記事を書いた記憶がある。 約30年近く生きてきた自分を省みると、だいたい3ヶ月の壁があって、3ヶ月以上続くとその後も習慣が続くことが多いのでまずは3ヶ月を超えられるようにしたいですね と書いていたけど、10 年続いたな。 10 年間、人があまり経験しないようなことも何度か経験したなー。心停止した人を発見して心肺蘇生法施して命を救うってそうそう経験しないでしょ?(そのときは Youtube でやり方を調べました)。あとはレイオフで社員は半分クビです、というのもあった。「今週末が最終出社です」みたいなの日本でもあるんだね(もちろん合法的な手続きです)。 でも、やっぱり子供が生まれたことが一番大きいな。 ブログを初めてすぐに生まれた子供はもうすぐ 10 歳になる。10 年後は 20 歳。確実に時の流れは加速していて、こうやってあっという間に時間は過ぎ去っていくのであった。次の 10 年もあっという間に過ぎ去るのだろう。