HARD DAY'S NIGHT別館

当サイトへお越しいただきありがとうございます。 実務に生かせるような技術・ライブラリを使った簡単なサンプルを公開してゆきます。

PHPでWebサービス(GETリクエスト)の呼び出し

PHP から Webサービス(GETリクエスト)を呼び出す例として、 「Yahoo ディベロッパーネットワーク」が提供している「テキスト解析 キーフレーズ抽出」APIを使用してみます。

入力された文章から、特徴となるキーフレーズを抽出し、その結果を表示します。

文章:


キーフレーズ抽出結果:

Webサービス by Yahoo! JAPAN

コード


$(function() {
    $("#toolbar").buttonset();

    // 抽出ボタン クリック時処理
    $("#extract").click(function() {
        document.fcontents.submit();
    });

    var mydata = [
<?php
    if (!empty($_POST['phrase']))
    {
        $resultSet = ParsePhrase($_POST['phrase']);
        if ($resultSet !== false)
        {
            foreach ($resultSet as $result)
            {
                print "{ keyphrase:'".escapeString($result->{'Keyphrase'})."', score:'".escapeString($result->{'Score'})."'},";
            }
        }
    }
?>
    ];

    jQuery("#list").jqGrid({
        data: mydata,
        datatype: "local",
        colNames:['キーフレーズ', 'スコア'],
        colModel:[
            {index:'keyphrase', name:'keyphrase', width:'150px'},
            {index:'score', name:'score', width:'80px', sorttype:'int'},
        ],
        height: 'auto',
        sortname: 'score',
        sortorder: "DESC",
        multiselect: false,
        caption: 'キーフレーズ一覧'
    }); 
});

HTMLコード

<form name="fcontents" action="phpwget_sample1.php" method="post">
    <p>文章:</p>
    <textarea name="phrase" rows="5" cols="80">
<?php
if (!empty($_POST['phrase']))
{
    echo escapeString($_POST['phrase']);
}
else
{
    echo '文章をここに入力して、「キーフレーズ抽出」ボタンを押下すると結果を表示します。';
}
?>
    </textarea>
    <br>
    <div id="toolbar">
        <input type="button" id="extract" value="キーフレーズ抽出">
    </div>
</form> 

<p style="vertical-align:middle;">キーフレーズ抽出結果:</p>

<div name="output">
    <table id="list">
    </table>
</div>

<div>
<!-- Begin Yahoo! JAPAN Web Services Attribution Snippet -->
<a href="http://developer.yahoo.co.jp/about"><img src="http://i.yimg.jp/images/yjdn/yjdn_attbtn2_105_17.gif" width="105" height="17" title="Webサービス by Yahoo! JAPAN" alt="Webサービス by Yahoo! JAPAN" border="0" style="margin:15px 15px 15px 15px"></a>
<!-- End Yahoo! JAPAN Web Services Attribution Snippet -->
</div>


<?php
define('YAHOO_APPID', 'YAHOO ディベロッパーネットワークから取得したID');
define('YAHOO_EXTRACT', 'http://jlp.yahooapis.jp/KeyphraseService/V1/extract');

function ParsePhrase($phrase, $defTimeout = 5) {
    $url = YAHOO_EXTRACT.'?appid='.YAHOO_APPID.'&sentence='.urlencode($phrase).'&output=xml';
    return getUrl($url, $defTimeout);
}

function getUrl($url, $defTimeout = 5) {
    $resultSet = false;
    $timeout = $defTimeout; // set to zero for no timeout

    try {
        $ch = curl_init();

        curl_setopt ($ch, CURLOPT_URL, $url);
        curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);

        $res = curl_exec($ch);
        $info = curl_getinfo($ch);

        curl_close($ch);    

        if ($res && $info['http_code'] == 200) {
            $resultSet = simplexml_load_string($res);
        } else if ($info['http_code'] == 301) { // Redirect!
            $resultSet = getUrl($info['redirect_url'], $defTimeout);
        } else {
            $resultSet = false;
        }
    } catch (Exception $e) {
        trace('Handled exception in getUrl: '. $e->getMessage());
    }

    return $resultSet;
}
?>