text2applink ver.1.3—PHG 対応バージョン

2013-08-21-015

iTunes アフィリエイトプログラムの提携先がリンクシェアから PHG に変更されたことを受け、アプリのリンクタグを JavaScript で取得できる text2applink を取り急ぎ、PHG 対応バージョンに修正しました。

目次

  1. 修正内容
  2. 設定項目
  3. コード

修正内容

リンクシェアと PHG では、ブログに記載するリンクタグのフォーマットが異なります。今回の修正で、PHG に対応したリンクタグを出力するように変更しました。リンクシェアには対応していないので、まだ PHG のアカウントを取得しておらず、リンクシェアのリンクを張りたいという方はこれまでのスクリプトをお使いください。

設定項目

PHG では、リンクタグの記述方法が2種類あります。1つは、それぞれのリンクタグに自分のアフィリエイト ID を埋め込む方法。もう1つは、リンクタグ自体はデフォルトのものを使い、クリックされた時に自動的にアフィリエイトリンクに変換する Apple の JavaScript コードを利用する方法です。

詳しい違いや、自動変換の設定方法については以下の記事をご参照ください。

text2applink 1.3 は2種類の方法のどちらにも対応しています。設定場所は冒頭にあります。

/* PHGのIDを''の中に入力してください。Appleの自動変換ツール(Auto Link Maker)を利用する人や、PHGを利用しない人はそのままで結構です。 */
var phgid='';

PHG のアフィリエイト ID をすべてのリンクタグに埋め込みたい人は、ID を '' の間に入力します。ここが空欄であれば、text2applink は ID が埋め込まれていないデフォルトのリンクタグを出力しますので、Appleの自動変換ツールを利用する人は空欄のままにしてください。

また、text2applink で出力される見た目のフォーマットを、CSS を使ってご自身でカスタマイズしている方は、カスタマイズしたコードの中に linkshareurl という単語があります。ここを phgurl と変更しておいてください。お手数おかけしますが、よろしくお願いします。

コード

以下がコードです。全文、コピーして使ってください。

取り急ぎの修正なので、何かお気づきのことがありましたら hirose (@shirose_jp) までご連絡いただければありがたいです。また、現在 iTunes Search API の検索アルゴリズムに何かあったのか、アプリによっては、検索してもすぐに表示されない現象が起きています。何か分かればご報告します。

<meta charset="utf-8">
<script>

/* text2applink */

/* PHGのIDを''の中に入力してください。Appleの自動変換ツール(Auto Link Maker)を利用する人や、PHGを利用しない人はそのままで結構です。 */
var phgid='';

/* 検索対象にするアプリと検索件数を設定します。デフォルトではiPhone、iPad、Macアプリすべてが対象、検索件数はそれぞれ3件となっています。 */
var entities=new Array();

entities[entities.length]='software'; /* iPhoneアプリを検索対象から外す場合、先頭の'e'の前に'//'を入れてください。 */

entities[entities.length]='iPadSoftware'; /* iPadアプリを検索対象から外す場合、先頭の'e'の前に'//'を入れてください。 */

entities[entities.length]='macSoftware'; /* Macアプリを検索対象から外す場合、先頭の'e'の前に'//'を入れてください。 */

var limit=3; /* iPhoneアプリ、iPadアプリ、Macアプリそれぞれの検索件数です。 */

/* リンクタグの出力をポップアップ形式からURLスキーム形式に変更する場合は、出力先のURLスキームを''の中に入力してください。 */
var urlscheme='';

/* URLスキームに渡すリンクタグに続けて、コールバックなどのパラメータを指定したい場合は''の中に入力してください。 */
var suffix='';

/* これ以降は基本的に修正する必要はありません。スタイルをCSSで制御する場合は後半部分にあるコメントをお読みください。 */

var ua=navigator.userAgent;
if(ua.indexOf('iPhone')==-1&&ua.indexOf('iPad')==-1&&ua.indexOf('iPod')==-1)
{
urlscheme='';
suffix='';
}

var term=prompt('アプリ名を入力してください。');
if(term)
{
var products;
var newlimit=limit;
main(limit);
}

function main(arg)
{
var buttons='<div style="margin:10px 0;text-align:center"><input type="button" value="再検索" onclick="anothersearch()" style="margin-right:10px"><input type="button" value="複数選択モード" onclick="multiplemode()" style="margin-right:10px"><input type="button" value="複数リンクを出力" onclick="multipleoutput()"></div>';
document.write(buttons);
var morebutton='<div style="margin:20px 0 10px;text-align:center"><input type="button" value="続きを読み込む" onclick="more()"></div>';
if(newlimit!=limit)
{
document.write(morebutton);
}
for(var i=0;i<entities.length;i++)
{
var entity=entities[i];
var type;
if(entity=='software')
{
type='iPhone';
}
else if(entity=='iPadSoftware')
{
type='iPad';
}
else
{
type='Mac';
}
var title='<div style="background:#37709c;color:#fff;margin-bottom:5px;text-align:center">'+type+'</div>';
document.write(title);
appsearch(entity,arg);
}
document.write(morebutton);
var topbutton='<div style="margin-top:20px;text-align:center"><input type="button" value="ページトップへ戻る" onclick="scrollTo(0,screenTop)"></div>';
document.write(topbutton);
document.close();
}

function appsearch(arg1,arg2)
{
var searchurl='http://itunes.apple.com/search?term='+term+'&country=jp&entity='+arg1+'&limit='+arg2;
var xmlhttp=new XMLHttpRequest();
xmlhttp.open('get',searchurl,false);
xmlhttp.send();
var response=xmlhttp.responseText;
var results=JSON.parse(response).results;
rendering(arg1,results);
}

function rendering(arg1,arg2)
{
if(newlimit!=limit)
{
arg2=arg2.reverse();
}
for(var i=0;i<arg2.length;i++)
{
var app=arg2[i];
var icon60=app.artworkUrl60;
var icon150=app.artworkUrl512.replace(/512x512-75.\w*$|\w*$/, '150x150-75.png');
var developer=app.artistName;
var version=app.version;
var genres=app.genres.join(', ');
var release=app.releaseDate.replace(/T.*$/,'');
var name=app.trackName;
var price=app.formattedPrice;
var size=(app.fileSizeBytes/1000000).toFixed(1).replace(/$/,' MB');
var storeurl=app.trackViewUrl;
var universal='';
if(arg1!='macSoftware')
{
var features=app.features;
var check=features.indexOf('iosUniversal');
if(check!=-1)
{
universal='iOS Universal';
}
}
var phgurl=storeurl;
if(phgid.length!=0)
{
phgurl=storeurl+'&at='+phgid;
}
var format='<div style="border:1px dashed #ccc;margin:10px;overflow:hidden;padding:15px"><img src="'+icon150+'" alt="'+name+'" style="border-radius:13px;float:left;height:75px;margin-bottom:5px;margin-right:15px;width:75px"><ul style="list-style:none;margin:0;padding:0"><li style="margin:0;padding:0"><span style="color:#37709c;font-size:larger;font-weight:bold">'+name+'</span></li><li style="margin:0;padding:0">カテゴリ: '+genres+'</li><li style="margin:0;padding:0">価格: '+price+'(記事掲載時)</li><li style="margin:0;padding:0">開発元: '+developer+'</li></ul><a href="'+phgurl+'" target="itunes_store" rel="nofollow" style="font-size:larger;font-weight:bold">App Store</a></div>';

/* スタイルをHTMLに記述せず、CSSで制御する場合は次のコードの先頭、'format'の前にある'//'を削除し、フォーマットを自由に編集してください。CSSのサンプルは末尾にあります。 */

//format='<div class="app-link"><img src="'+icon150+'" alt="'+name+'"><ul><li><span>'+name+'</span></li><li>カテゴリ: '+genres+'</li><li>価格: '+price+'(記事掲載時)</li><li>開発元: '+developer+'</li></ul><a href="'+phgurl+'" target="itunes_store" rel="nofollow">App Store</a></div>';

var product=encodeURIComponent(format);
product=product.replace(/\'/g,'%27');
var preview='<div style="border:1px dashed #ccc;margin-bottom:10px;overflow:hidden;padding:10px"><img src="'+icon60+'" style="border-radius:10px;float:left;height:57px;margin-right:10px;width:57px">'+name+' ('+price+')<br>'+developer+'<br><input type="button" value="リンクを取得" onclick="output(\''+product+'\')" style="float:right"><span style="color:#37709c;float:right;margin-right:10px">'+universal+'</span></div>';
document.write(preview);
}
}

function output(arg)
{
if(products==undefined)
{
if(urlscheme=='')
{
arg=decodeURIComponent(arg);
prompt('以下のタグを全選択してコピーしてください。',arg);
}
else if(urlscheme.indexOf('draftpad:///webdelegate')==-1)
{
var answer=confirm('URLスキームで出力します。');
if(answer==true)
{
location.href=urlscheme+arg+suffix;
}
else
{
answer=confirm('ポップアップで出力しますか?')
if(answer==true)
{
arg=decodeURIComponent(arg);
prompt('以下のタグを全選択してコピーしてください。',arg);
}
}
}
else
{
var answer=confirm('URLスキームで出力します。');
if(answer==true)
{
arg=arg.replace(/%27/g, '\\\'');
location.href=urlscheme+arg+suffix;
}
else
{
answer=confirm('ポップアップで出力しますか?')
if(answer==true)
{
arg=decodeURIComponent(arg);
prompt('以下のタグを全選択してコピーしてください。',arg);
}
}
}
}
else
{
products[products.length]=arg;
alert('リンクを取得しました。');
}
}

function anothersearch()
{
term=prompt('アプリ名を入力してください。');
if(term)
{
newlimit=limit;
main(limit);
}
}

function multiplemode()
{
if(products==undefined)
{
products=new Array();
alert('複数選択モードに切り替えました。');
}
else
{
var answer=confirm('通常モードに戻しますか?(すでに取得したリンクはクリアされます。)');
if(answer==true)
{
products=undefined;
}
}
}

function multipleoutput()
{
if(products==undefined)
{
alert('複数のリンクを取得するには、まず「複数選択モード」を押してください。');
}
else if(products.length==0)
{
alert('取得されたリンクがありません。')
}
else
{
if(urlscheme=='')
{
var join=products.join('%0a%0a');
join=decodeURIComponent(join);
prompt('以下のタグを全選択してコピーしてください。',join);
}
else if(urlscheme.indexOf('draftpad:///webdelegate')==-1)
{
var join=products.join('%0a%0a');
var answer=confirm('URLスキームで出力します。');
if(answer==true)
{
location.href=urlscheme+join+suffix;
}
else
{
answer=confirm('ポップアップで出力しますか?')
if(answer==true)
{
prompt('以下のタグを全選択してコピーしてください。',decodeURIComponent(join));
}
}
}
else
{
var answer=confirm('URLスキームで出力します。');
if(answer==true)
{
var join=products.join('\\n\\n');
join=join.replace(/%27/g, '\\\'');
location.href=urlscheme+join+suffix;
}
else
{
answer=confirm('ポップアップで出力しますか?')
if(answer==true)
{
var join=products.join('%0a%0a');
prompt('以下のタグを全選択してコピーしてください。',decodeURIComponent(join));
}
}
}
}
}

function more()
{
newlimit+=5;
main(newlimit);
scrollTo(0,screenTop);
}

/* CSSのサンプルです。

.app-link {
 border: 1px dashed #ccc;
 margin: 10px;
 overflow: hidden;
 padding: 15px;
}

.app-link img {
 border-radius: 13px;
 float: left;
 height: 75px;
 margin-bottom: 5px;
 margin-right: 15px;
 width: 75px;
}

.app-link ul {
 list-style: none;
 margin: 0;
 padding: 0;
}

.app-link li {
 margin: 0;
 padding: 0;
}

.app-link span {
 color: #37709c;
 font-size: larger;
 font-weight: bold;
}

.app-link a {
 font-size: larger;
 font-weight: bold;
}

サンプルはここまでです。 */

</script>

4 thoughts on “text2applink ver.1.3—PHG 対応バージョン

  1. Pingback: [凛]text2applinkとアプリ連携でモブログでも快適アプリ紹介!PHG対応済み! | りんろぐ。

  2. Pingback: text2applinkとテキストエディターを使ったアプリリンクの貼り付け方法 | 工学博士のLifelog Diary

  3. Pingback: PHG:iTunesアフィリエイトプログラムの概要レポートの見方 | イロトリドリ

  4. Pingback: PHG:iTunesアフィリエイトプログラムの概要レポートの見方と設定 | イロトリドリ

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です