3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Amazonプライムが値上げだそうですが、Prime Videoの見放題終了日を表示するブラウザ拡張にパッチを当てた

Last updated at Posted at 2019-04-14

なんだか Amazonプライム が値上げだそうですね。
私もAmazonプライムを利用しているので値上げは少し残念ですが、これも良いサービス継続のためと思って受け入れようと思っています。

ところで Amazon Prime Video って、見放題の期間が終了しそうな作品の検索ページがあるのですが、
Amazon.co.jp: 30日以内にプライム会員特典ではなくなる作品

この作品検索ページに公開期限を表示してくれるChrome拡張/Safari拡張がありまして、それにパッチを当てましたのでご紹介します。

expiration.png ↑作品サムネイル画像をマウスオーバーすると、こんな感じで公開期限をポップアップ表示してくれます。

動機

本来のAmazonの作品検索ページでは肝心の「公開期限がいつか?」が分からず辛かったのですが、公開期限を表示してくれるChrome拡張をGithubで見つけた!
harawata/prime-video-expiration-date: Amazon ビデオの "30 日以内にプライム会員特典ではなくなる作品" のリストに見放題終了日を表示します。
作者は MyBatis で有名な harawata さんです。

しかしこのコードは2017年頃に書かれたようで、残念ながら2019年4月現在のAmazon検索ページではうまく動作しませんでした。。。

そこでパッチを当てて動作するようにしました。

インストール方法 for Chrome

本家のharawataさんにPull Requestしましたので、いずれ取り込まれるかもしれませんが、お急ぎの方は以下のリンクからパッチ版であるfix-for-amazon-updatesブランチのソース一式を[Clone or Download]ボタン等でzipファイルをダウンロードして、
htaketani/prime-video-expiration-date at fix-for-amazon-updates

早速、本家のharawataさんにマージしてもらいました!
以下の Releasesページから v1.1.0がDLできます。
Releases · harawata/prime-video-expiration-date

解凍した中身の PrimeVideoExpirationDate.safariextension ディレクトリをChromeの 拡張機能(chrome://extensions/) ページにドラッグ&ドロップしてインストールしてください。

Chromeの最新版(バージョン 73.0.3683.86)で動作確認しています。

インストール方法 for Safari

オリジナルのプログラムはChromeとSafariの両対応しているとのことですのでSafari用の Info.plist にも修正を入れています。

インストール方法は README を参考にしてください。

しかしながら、私の修正が悪いのかインストール方法が悪いのか、手元のSafariにインストールを試みたものの動作させることができませんでした。。。
[未署名の機能拡張を許可]オプションを有効にしてみたりしたのですが、よく分かりませんでした。
私は普段Chromeしか使っていないため、Safariの機能拡張について明るくなく、このあたりの方法分かる方がいらっしゃいましたら、アドバイスいただければと思います。

修正に際して出会った技術的ないくつか

普段、フロントエンドは全くやらないので苦労しました。
何かおかしな所あったらご指摘ください。

脱jQuery?

オリジナルはjQueryを利用して書かれていましたので、最初は「ついでにjQueryを使わずに書き直そうかな」とも思ったのですが、ちょっと面倒で結局jQueryをそのまま利用しています。

とりあえず、jQueryを最新版 v3.4.0にアップグレードしておきました。

AmazonのAPIが返すjsonの末尾にゴミ

https://www.amazon.co.jp/gp/video/hover/(ASINコード) で得られる json は以下のような形式ですが、なぜか末尾にゴミ?のような文字列「&&&」がくっついていました。

末尾にゴミのあるjson
["hover-body","<div id=\"av-hover-body\" >...</div>"]&&&

最初はこれに気付かずに、jQueryの$.getJSON()が働かないことに首をかしげました。
この「&&&」って何なんでしょう?

JSONパースできずにエラー
$.getJSON(url, opts, function(data){
  ...
});

APIのレスポンスを、正規表現で末尾のゴミを除去してからJSON.parse()するように修正しました。

末尾のゴミを除去してからJSONパース
$.get(url, opts, function(raw){
  // json末尾の"]"以外の文字を削除
  var json = raw.replace(/[^\]]+$/, "");
  var data = JSON.parse(json);
  ...
}, "text");

注意

本extensionではPrime Videoホーム画面のマウスホバー時の作品概要を得るAPIを利用しています。
元々のREADMEにも書かれていますが、ここで利用しているAPIでは公開期限が必ず提供されるわけでは無いようです。
公開期限が表示されていない作品はいつ期限切れを迎えるかは分かりませんのでお早めに。

逆に言えば、期限表示されている作品は安心して視聴を先延ばしできる、と考えることもできるかもしれませんが、いずれにしても過信は禁物です。

最後に

プライムビデオで「砂の器 デジタルリマスター版」を見ました。
加藤嘉の熱演にやられました。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?