App Storeからアプリの情報を取得するプログラムをPHPで作ってみた

ブログ運営

ブログで、アプリの紹介をすることがあり、ダウンロード先の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を使用してアプリのアイコン画像を表示しています。解像度を低めにしたい場合は、artworkUrl60やそれ以下のサイズを指定することができます。

検索結果一覧の情報を、グリップボードにコピー

検索結果を全件出力する必要が無いので、上位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から情報を取得するだけのシンプルなプログラムです。使い方次第では、便利なウェブアプリが作れるかもしれませんね。

タイトルとURLをコピーしました