ブログで、アプリの紹介をすることがあり、ダウンロード先のURLを調べるのに大変なので、作ってみました。アプリのキーワードで検索し、その情報を元にApp StoreからURLを取得し、そのままブログにコピペして使えるように、Javaスクリプトの処理も組み込んでみました。
Windows環境で確認しているので、他の環境では動作は保証できませんので予めご了承ください。
App Storeから情報を取得するサンプルプログラム
App Storeから情報を取得するプログラム
検索フォームを作成し、それを使ってApp Storeからアプリの情報を検索し、PHPスクリプトを介して結果を表示することはできます。以下は、HTMLとPHPを組み合わせた基本的な検索フォームの例です。この例では、ユーザーがフォームにキーワードを入力し、送信ボタンをクリックすると、そのキーワードに基づいてApp Storeを検索し、結果を表示します。
form.html:ユーザーがキーワードを入力できるシンプルな検索フォームを作成します。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>App Store Search</title>
</head>
<body>
<h1>App Store 検索フォーム</h1>
<form action="search.php" method="get">
<label for="keyword">検索キーワード:</label>
<input type="text" id="keyword" name="keyword" required>
<button type="submit">検索</button>
</form>
</body>
</html>
search.php:検索フォームから送信されたキーワードを使ってApp Storeを検索し、結果を表示するPHPスクリプトを作成します。
<?php
if (!empty($_GET['keyword'])) {
$keyword = $_GET['keyword'];
$country = 'jp'; // 国コード、日本のApp Storeを検索
// iTunes Search APIを使用して検索
$url = "https://itunes.apple.com/search?term=".urlencode($keyword)."&country=".$country."&entity=software";
// cURLを使用してリクエスト
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
curl_close($ch);
// 結果をデコード
$result = json_decode($result, true);
// アプリのURLを表示
if (!empty($result['results'])) {
foreach ($result['results'] as $app) {
// アプリ名とURLを表示
echo "<p>アプリ名: " . $app['trackName'] . "<br>";
echo "URL: <a href='" . $app['trackViewUrl'] . "'>" . $app['trackViewUrl'] . "</a></p>";
}
} else {
echo "該当するアプリが見つかりませんでした。";
}
} else {
echo "キーワードを入力してください。";
}
?>
このシンプルな例を使って、ユーザーがキーワードを入力してApp Storeのアプリを検索できるようになります。実際のプロジェクトでは、セキュリティ対策(例えば、ユーザー入力のサニタイズ)、エラーハンドリング、デザインの改善など、さらなる改良が必要になるでしょう。
関連性の高い順、アプリの画像など表示して出力
アプリ名、アプリの画像、説明文を出力しつつ、関連性の高い順にソートして出力してみます。iTunes Search APIの結果はある程度関連性が高い順にソートされていますが、返された結果を自分でさらにカスタマイズしてソートする場合、PHPの配列ソート関数を使用することができます。
<?php
if (!empty($_GET['keyword'])) {
$keyword = $_GET['keyword'];
$country = 'jp'; // 国コード、日本のApp Storeを検索
// iTunes Search APIを使用して検索
$url = "https://itunes.apple.com/search?term=".urlencode($keyword)."&country=".$country."&entity=software&limit=10";
// cURLを使用してリクエスト
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
curl_close($ch);
// 結果をデコード
$result = json_decode($result, true);
// アプリの詳細を表示
if (!empty($result['results'])) {
foreach ($result['results'] as $app) {
echo "<div>";
// アプリ名とアイコン、URLを表示
echo "<h2>" . htmlspecialchars($app['trackName'], ENT_QUOTES, 'UTF-8') . "</h2>";
echo "<p><img src='" . htmlspecialchars($app['artworkUrl100'], ENT_QUOTES, 'UTF-8') . "' alt='App Icon'></p>";
echo "<p>URL: <a href='" . htmlspecialchars($app['trackViewUrl'], ENT_QUOTES, 'UTF-8') . "'>" . htmlspecialchars($app['trackViewUrl'], ENT_QUOTES, 'UTF-8') . "</a></p>";
// アプリの説明を表示
echo "<p>" . nl2br(htmlspecialchars($app['description'], ENT_QUOTES, 'UTF-8')) . "</p>";
echo "</div><hr>";
}
} else {
echo "該当するアプリが見つかりませんでした。";
}
} else {
echo "キーワードを入力してください。";
}
?>
この例では、
を使用してアプリのアイコン画像を表示しています。解像度を低めにしたい場合は、artworkUrl100
artworkUrl
60やそれ以下のサイズを指定することができます。
検索結果一覧の情報を、グリップボードにコピー
検索結果を全件出力する必要が無いので、上位10件と指定できるようにし、出力結果をjavaスクリプトで取得するように修正。ブログにApp Storeの情報を記載したいので、そのままコピペできるように、修正しました。<a>タグのフォーマットでコピーするので、そのまま使えるようにしました。
<?php
// ユーザーがキーワードを入力した場合に検索を実行
if (!empty($_GET['keyword'])) {
$keyword = $_GET['keyword'];
$country = 'jp'; // 国コード、日本のApp Storeを検索
$limit = 10; // 検索結果の上限を10件に設定
// iTunes Search APIを使用して検索
$url = "https://itunes.apple.com/search?term=".urlencode($keyword)."&country=".$country."&entity=software&limit=".$limit;
// cURLを使用してリクエスト
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
curl_close($ch);
// 結果をデコード
$result = json_decode($result, true);
} else {
// キーワードが入力されていない場合は空の結果をセット
$result = [];
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>App Store Search</title>
<script>
function copyToClipboard(html) {
// HTMLエンティティをデコードするための関数
function htmlDecode(input){
var e = document.createElement('textarea');
e.innerHTML = input;
// textareaのvalueはデコードされた内容を保持
return e.value;
}
const text = htmlDecode(html);
navigator.clipboard.writeText(text).then(function() {
alert('コピーしました: ' + text);
}, function(err) {
console.error('コピーに失敗しました: ', err);
});
}
</script>
</head>
<body>
<h1>App Store 検索フォーム</h1>
<form action="" method="get">
<label for="keyword">検索キーワード:</label>
<input type="text" id="keyword" name="keyword" required>
<button type="submit">検索</button>
</form>
<?php if (!empty($result['results'])): ?>
<ul>
<?php foreach ($result['results'] as $app): ?>
<li>
<?php
// HTMLエンティティにエスケープされたコピー用テキストを生成
$copyText = htmlentities("<a href='{$app['trackViewUrl']}' target='_blank'>{$app['trackName']}</a>");
echo "<p>{$app['trackName']}</p>";
// HTMLエンティティを属性値として扱うために、さらにhtmlspecialcharsを適用
echo "<button onclick=\"copyToClipboard('".htmlspecialchars($copyText, ENT_QUOTES)."')\">コピー</button>";
?>
</li>
<?php endforeach; ?>
</ul>
<?php elseif ($_SERVER['REQUEST_METHOD'] == 'GET' && !empty($_GET['keyword'])): ?>
<p>該当するアプリが見つかりませんでした。</p>
<?php endif; ?>
</body>
</html>
このスクリプトでは、ユーザーがボタンをクリックすると、選択したアプリのURLをクリップボードにコピーします。navigator.clipboard.writeText
を使用していますので、この機能をサポートしているブラウザ(最近の主要なブラウザのほとんど)であれば問題なく動作するはずです。
さいごに
今回はApp Storeから情報を取得するだけのシンプルなプログラムです。使い方次第では、便利なウェブアプリが作れるかもしれませんね。