Androidマーケットの情報をPHPでとってくる。(追加)

Androidマーケットの情報をPHPで取得

意外と興味を持ってる人が多いので、ソースを簡単に説明
概要などはこちら→PHPからマーケットにアクセスするAPI
まず、どんな物かというと、これらの便利なPHPがあります。

  • local.php
    アカウント情報
  • market.proto.php
    マーケットのデータを整形
  • MarketSession.php
    マーケットとの通信を確立
  • protocolbuffers.inc.php
    これも通信系

MarketSessionとlocal.phpの修正

編集の必要があるのは、local.phpとMarketSession.phpを修正します。
local.phpにはアカウントを設定して、MarketSession.phpの修正は過去の記事を見てください。
ANDROID_DEVICEIDは適当でもよさそうですが、一応端末のデバイスIDを記載しました。

検索したら、画像と情報を一覧表示する様にしたいので、こんな感じにGETの値を取得して詳細検索を行うようにします。

[code language=”php”]
include("MarketLib/local.php");
include("MarketLib/protocolbuffers.inc.php");
include("MarketLib/market.proto.php");
include("MarketLib/MarketSession.php");
$sQuery = $_POST["search"] ? $_POST["search"] : "";
$session = new MarketSession();
$session -› login( GOOGLE_EMAIL , GOOGLE_PASSWD );
$session -› setAndroidId( ANDROID_DEVICEID );
$oAppReq = new AppsRequest();
$oAppReq -› setQuery($sQuery);
$oAppReq -› setStartIndex($nStart);
$oAppReq -› setEntriesCount($nListNum);
$oAppReq -› setWithExtendedInfo(true); //詳細検索する
$oAppReq-› setOrderType(AppsRequest_OrderType::NONE);
$oAppReq-› setViewType(AppsRequest_ViewType::ALL);
$reqGroup = new Request_RequestGroup();
$reqGroup -›setAppsRequest($oAppReq);
$response = $session-›execute($reqGroup);
$groups = $response-›getResponsegroupArray();
[/code]

次に取得したデータ分ループさせる。

[code language=”php”]
//マーケットの一覧データを一個一個解析
foreach ($groups as $rg)
{
$appsResponse = $rg-›getAppsResponse();
$apps = $appsResponse-›getAppArray();
//ココが個々のアプリループです。
foreach ($apps as $app)
{
$sIcon = AppIcon( $app-›getId() );
$oAppExtend = $app-›getExtendedinfo();
echo "‹img src=’".$sIcon."’›";
echo $app-›getTitle();
echo $app-›getId();
echo $app-›getPackageName();
echo $app-›getVersion();
echo $app-›getCreator();
echo $app-›getPriceCurrency();
echo $app-›getPrice();
echo $app-›getPriceMicros();
echo $oAppExtend->getPromoText();
echo $oAppExtend->getDescription();
echo "<br />";
}
}
//画像取得
function AppIcon($p_AppId)
{
global $session;
$savepath = "/var/www/html/icon/"
$session = new MarketSession();
$session-&#155;login(GOOGLE_EMAIL, GOOGLE_PASSWD);
$session-&#155;setAndroidId(ANDROID_DEVICEID);
$gir = new GetImageRequest();
$gir-&#155;setImageUsage(GetImageRequest_AppImageUsage::ICON);
$gir-&#155;setAppId($p_AppId);
$gir-&#155;setImageId(1);
$reqGroup = new Request_RequestGroup();
$reqGroup-&#155;setImageRequest($gir);
$response = $session-&#155;execute($reqGroup);
$groups = $response-&#155;getResponsegroupArray();
foreach ($groups as $rg)
{
$imageResponse = $rg-&#155;getImageResponse();
$imgpath = savepath.$p_AppId.".png";
file_put_contents(imgpath, $imageResponse-&#155;getImageData());
}
return $imgpath;
}
[/code]

後は適当にFormを用意すれば、マーケットの情報を表示できます。
このAPIかは分かりませんが、いくつかアクセスする度にマーケットの情報を引っ張っている
アプリ紹介サイト?もありました。

Androidマーケットの情報をPHPでとってくる。

Androidマーケットの情報をPHPで取得

今は公式にPC版マーケットが出てきましたが、今まではAndroidマーケットアプリからしかアクセスできず不便でした。
この記事そんなときに見つけた、PHPからマーケットアプリの通信をマネてアクセスする方法です。

Android Market API for PHPの使い方

→http://code.google.com/p/android-market-api-php/
使い方は簡単でまずは「local.php」にGoogleアカウントを設定する。
sampleがあるので、実行してみるとちゃんと取れる。

ざっとみたかんじ大体こんな感じ?

MarketSession.php:キャリアやバージョンなどの設定はここにある。
market.proto.php:どんな検索できるかな?はここをみる。

DOCOMOにしたかったので、MarketSession.phpを下記のように変更

[code language=”php”]
function __construct () {
$this->context = new RequestContext();
$this->context->setUnknown1(0);
$this->context->setVersion(1002012);
$this->context->setDeviceAndSdkVersion("passion:8");
$this->context->setUserLanguage("ja");
$this->context->setUserCountry("JP");
$this->setOperatorDocomo();
}
public function setOperatorDocomo() {
$this->setOperator("NTT DOCOMO", "44010");
}
[/code]

サンプル試していて、プロモーションテキストなど取れないかなって見てたら、newした後にsetWithExtendedInfoをtrueにしてあげる必要がある。

[code language=”php”]
$oAppReq = new AppsRequest();
$oAppReq -> setWithExtendedInfo(true);
[/code]

とりあえず、それっぽく検索はできる様になったけど、日本語検索がマーケットアプリとは違う動きをするときがあるので調査中。

サンプルページはコチラ

CentOS5.5でPHPの最新版(5.3)をインストール

脆弱性対策としてPHPの5.3をインストールする必要が出た。

CenstOSだから、最新はきついと思いながら調べたらレポジトリ追加でなんとかなった。

remiというレポジトリをどうやら追加しておこなう。
ココではないけど、MySQLの使ってるので、MySQLもいっしょにアップデートの必要があるらしい。

テストで違うサーバでやったら一回失敗して、mysqlが壊れて再インストールしましたw
大丈夫だと思うけど、mysqldumpでバックアップはしておきましょう。

yumに「epel」と「remi」を追加する。

#rpm -ivh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm
#rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-5.rpm

常用しないように「epel」と「remi」の「enabled=0」を設定(なっているはず)

#vi /etc/yum.repos.d/epel.repo
#vi /etc/yum.repos.d/remi.repo

yumのオプションで「epel」と「remi」を有効にしてアップデート
phpだけだど、mysqlがらみでエラーがでるので、いっしょに。

#yum update --enablerepo=remi,epel php mysql mysql-server

完了。

# php -v
PHP 5.3.0 (cli) (built: Jul 19 2009 17:55:08)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2009 Zend Technologies