今日のフェンリルデベロッパーズブログに載っているブックマークレットを弄る

タイトルは釣りくさいかも

今週はあまりやる気が起きてないので手抜きな内容ですw

単純な手直し

まず、どんなブックマークレットかと言いますと、iTunes App Storeのカスタマー評価を取得するものです。
詳しいことはデベロッパーズブログを見てください。

ブックマークレットを転載(Sleipnir Mobile の日本での評価のもの)

javascript:(function(){window.apcb=function(j){t=j.results[0];alert('今までの評価: '+t.averageUserRating+' / '+t.userRatingCount+'件\n最新版の評価: '+t.averageUserRatingForCurrentVersion+' / '+t.userRatingCountForCurrentVersion+'件')};var s=document.createElement('script');s.type='text/javascript';s.src='http://ax.itunes.apple.com/WebObjects/MZStoreServices.woa/wa/wsLookup?id=404732112&entity=software&country=jp&callback=apcb';document.body.appendChild(s);})();

これは変数のスコープに問題ありますね。

例えば、適当なページで上記ブックマークレット実行後に以下のブックマークレット実行すると情報が取得できます。

javascript:(function(){alert('今までの評価:%20'+t.averageUserRating+'%20/%20'+t.userRatingCount+'件\n最新版の評価:%20'+t.averageUserRatingForCurrentVersion+'%20/%20'+t.userRatingCountForCurrentVersion+'件');})();

という訳で、その辺の部分を修正したものです。ついでに半角スペースも置換してみました。*1

javascript:(function(){window.apcb=function(j){var%20t=j.results[0];alert('今までの評価:%20'+t.averageUserRating+'%20/%20'+t.userRatingCount+'件\n最新版の評価:%20'+t.averageUserRatingForCurrentVersion+'%20/%20'+t.userRatingCountForCurrentVersion+'件')};var%20s=document.createElement('script');s.type='text/javascript';s.src='http://ax.itunes.apple.com/WebObjects/MZStoreServices.woa/wa/wsLookup?id=404732112&entity=software&country=jp&callback=apcb';document.body.appendChild(s);})();

柔軟に利用できるようにしてみる

アプリと国によってスクリプトを適宜書き換えるのもなんなんで、iTunes App Storeのアプリ個別ページにて実行すると、そのアプリと国にあわせたカスタマー評価を出すようにしてみた。

javascript:(function(){if(location.hostname=='itunes.apple.com'&&location.pathname.match(/^\/\D+\/app\/.*id\d+/)!=null){window.apcb=function(j){var%20t=j.results[0];alert('今までの評価:%20'+t.averageUserRating+'%20/%20'+t.userRatingCount+'件\n最新版の評価:%20'+t.averageUserRatingForCurrentVersion+'%20/%20'+t.userRatingCountForCurrentVersion+'件')};var%20p=location.pathname.split('/'),s=document.createElement('script');s.type='text/javascript';s.src='http://ax.itunes.apple.com/WebObjects/MZStoreServices.woa/wa/wsLookup?id='+p[p.length-1].replace('id','')+'&entity=software&country='+p[1]+'&callback=apcb';document.body.appendChild(s);}else{alert('アプリ個別ページで実行してください');}})();

Sleipnirだと動きません。Chromeだと動きます。他のブラウザは試してないです。


ただ、一部の国だと上手く動かないっぽいんで、国はプロンプトで入力可能にしてみた。*2

javascript:(function(){if(location.hostname=='itunes.apple.com'&&location.pathname.match(/^\/\D+\/app\/.*id\d+/)!=null){window.apcb=function(j){var%20t=j.results[0];alert('今までの評価:%20'+t.averageUserRating+'%20/%20'+t.userRatingCount+'件\n最新版の評価:%20'+t.averageUserRatingForCurrentVersion+'%20/%20'+t.userRatingCountForCurrentVersion+'件')};var%20p=location.pathname.split('/'),c=prompt('Enter%20Country',p[1]),s=document.createElement('script');s.type='text/javascript';s.src='http://ax.itunes.apple.com/WebObjects/MZStoreServices.woa/wa/wsLookup?id='+p[p.length-1].replace('id','')+'&entity=software&country='+c+'&callback=apcb';document.body.appendChild(s);}else{alert('アプリ個別ページで実行してください');}})();

*1:あとは"0"件の場合にはnullになったりもするんだけど、そこはいいかなw

*2:例えば"uk"は動かない?"gb"で取れたりするんだけど、これが英国のでいいのかな?調べてないけどw