CodeZine(コードジン)

特集ページ一覧

PHPライブラリ「Imagick」で携帯の機種に応じた画像を表示する

目的に応じて適材適所で使うPHPライブラリ(1)

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2009/10/19 14:00

目次

携帯画面のサイズを取得するためのクラス/メソッドの作成

 携帯電話のプロパティを取得するためにPEARのNet_UserAgent_Mobileモジュールを利用します。Net_UserAgent_Mobileがインストールされていない場合は以下のコマンドでインストールします。

 -fオプションはNet_UserAgent_Mobileがbeta版のため、-oオプションは必要な最小限度のパッケージも同時にインストールを意味します。

# pear install -f -o Net_UserAgent_Mobile

 Net_UserAgent_Mobileにはキャリア、機種の取得や画面サイズの取得といったメソッドが備わっており、次のようにして利用します。

// インスタンス生成
$agent = Net_UserAgent_Mobile::singleton();

// キャリア表示
echo $agent->getName();
// 機種名表示
echo $agent->getModel();

// 画面情報を取得
$display = $agent->getDisplay();
// 横サイズ表示
echo $display->_width;
// 縦サイズ表示
echo $display->_height;

 携帯電話の機種によってはNet_UserAgent_MobileのgetDisplay()では端末情報を取得できないものもあります。そこでバリューエンジンのWebサイトで公開されている端末プロファイルを利用します。

 Net_UserAgent_MobileのgetDisplay()で画面サイズを取得できない際に端末プロファイルを読み込んで、画面サイズを返却する端末サイズマネージャークラスを作成します。

[リスト1]DeviceManager.class.php
require_once 'Net/UserAgent/Mobile.php';
// クラス宣言
class DeviceManager extends Net_UserAgent_Mobile{

    // オブジェクト定義
    var $agent;

    // コントラクタ
    function DeviceManager(){
        $this->agent = & parent::singleton();
    }

    // モデル名取得
    function getModel(){
        return $this->agent->getModel();
    }

    function getDisplay(){
        // Net_UserAgent_Mobileでの画面情報取得
        $display = $this->agent->getDisplay();
       
        // 画面情報があれば返却
        if($display->_width){
            return $display;
        }
       
        // モデル名を取得
        $device_name = $this->getModel();
       
        $deviceArray = array();
        // UserAgent情報のCSVファイル読込
        $_file =  'UserAgent_YYYY-MM-DD.csv';
        $_array = explode("\n",file_get_contents($_file));
        foreach($_array as $k=>$v){
            // キャリア,機種名,デバイス名,USER_AGENT,USER_AGENT_SCRAP,最終更新日  の形式
            $_d = explode(',',$v);
            // モデル名をキーとして機種名をvalueにした配列を作成します
            $deviceArray[$_d[2]] = $_d[1];
        }
       
        // 機種名を取得
        $model_name = $deviceArray[$device_name];
       
        // 端末ファイルにデータがない場合240でサイズを返却
        If(!$model_name){
            $display->_width = 240;
            $display->_height = 240;
            return $display;
        }
       
        $display_info = array();
        // 画面情報のCSVファイル読込
        $_file =  'DisplayInfo_YYYY-MM-DD.csv';
        $_array = explode("\n",file_get_contents($_file));
        foreach($_array as $k=>$v){
            //キャリア,機種名,表示タイプ,横,縦,最終更新日  の形式
            $_d = explode(',',$v);
            // 機種名が一致した場合
            if($model_name == $_d[1] && $_d[2] == 'ブラウザ画像サイズ'){
                $display_info = $_d;
                break;
            }
        }
        // 横,縦ともにサイズのデータがある場合
        if($display_info[3] && $display_info[4]){
            $display->_width = $display_info[3];
            $display->_height = $display_info[4];
        }
        // データがない場合
        else{
            $display->_width = 240;
            $display->_height = 240;
        }
        return $display;
    }
}

 バリューエンジンの端末プロファイルUserAgent_YYYY-MM-DD.csvより機種名を取得して、機種名をキーとしてDisplayInfo_YYYY-MM-DD.csvより画面サイズを取得するメソッドを作成します。端末プロファイルは次のようなフォーマットとなっています。

UserAgent_YYYY-MM-DD.csv
UserAgent_YYYY-MM-DD.csv
DisplayInfo_YYYY-MM-DD.csv
DisplayInfo_YYYY-MM-DD.csv

 UserAgent_YYYY-MM-DD.csvには「キャリア,機種名,デバイス名,USER_AGENT,USER_AGENT_SCRAP,最終更新日」の形式で、DisplayInfo_YYYY-MM-DD.csvには「キャリア,機種名,表示タイプ,横,縦,最終更新日」の形式でデータが入っています。UserAgent_YYYY-MM-DD.csvより携帯機種のUserAgentから機種名を取得して取得した機種名と表示タイプの「ブラウザ画像サイズ」でCSV内を検索して縦、横のサイズを取得します。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

バックナンバー

連載:目的に応じて適材適所で使うPHPライブラリ

もっと読む

著者プロフィール

  • 山田 祥寛(ヤマダ ヨシヒロ)

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XM...

  • WINGSプロジェクト 片渕 彼富(カタフチ カノトミ)

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂...

あなたにオススメ

All contents copyright © 2005-2022 Shoeisha Co., Ltd. All rights reserved. ver.1.5