久々の投稿2!

Posted in PHP

また長らく間があがってしまいましたが、外国為替のレートをつぶやくtwitter_botを作って見たのでご紹介します。
followは下記より。

follow by @currency_rater

wordpressのプラグインのCurrencyTickerを解析して得たAPIのURLをcurlでたたきに行って
結果をtwitterのAPIを介してつぶやきます。為替APIの都合上15分間隔更新にしています。
※一分おきに取得しに行くとアクセス拒否されるのでもしCRONなど動かす場合は最低でも15分間隔にしてください。

以下コードです。

#!/usr/bin/php
<?php
$url = "http://www.webservicex.net/CurrencyConvertor.asmx/ConversionRate?FromCurrency=%s&ToCurrency=%s";
$fromCode = array("USD", "EUR", "CNY", "KRW", "TWD");
$toCode = "JPY";
$running=null;
$ch = array();
$chUrl = array();
$chBody = array();
$mh = curl_multi_init();
$push = array();
foreach($fromCode as $code) {
    $chUrl[$code] = sprintf($url, $code, $toCode);
    $ch[$code] = curl_init(trim($chUrl[$code]));
    curl_setopt($ch[$code], CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($ch[$code], CURLOPT_HTTPGET, TRUE);
    curl_setopt($ch[$code], CURLOPT_TIMEOUT, 10);
    curl_multi_add_handle($mh,$ch[$code]);
}
do {
    curl_multi_exec($mh,$running);
} while ($running > 0);
foreach($fromCode as $code) {
    $chBody[$code]  = trim(strip_tags(curl_multi_getcontent($ch[$code])));
    curl_multi_remove_handle($mh,$ch[$code]);
    curl_close($ch[$code]);
}
curl_multi_close($mh);

foreach($chBody as $key => $val) {
    $code = $key;
    $rate = strlen($val) < 1 ? "" : (float)($val);
    if($rate == "") {
        $push[$key] = "-";
        continue;
    }
    switch($code) {
        case "KRW" :
            $push[$key] = round($rate, 4);
            break;
        default :
            $push[$key] = round($rate,2);
            break;
    }
}
$data = "";
$update_time = date("Y-m-d H:i:s");
foreach($push as $key => $val) {
    $data .= "JPY > ". $key ." : ". $val . " ";
}
$data .= " generate_time => " . $update_time;
$url = "http://twitter.com/statuses/update.xml?";
$username = "username";
$password = "password";
$params = "status=". rawurlencode($data." #followmeJP");

$result = file_get_contents($url.$params , false, stream_context_create(array(
    "http" => array(
        "method" => "POST",
        "header" => "Authorization: Basic ". base64_encode($username. ":". $password)
    )
)));

自分用に作成した場合は、$data = "";以下を修正してください。

Posted by isam   @   22 12月 2009

Like this post? Share it!

RSS Digg Twitter StumbleUpon Delicious Technorati

0 Comments

No comments yet. Be the first to leave a comment !
Leave a Comment

Name

Email

Website

Previous Post
«
Next Post
»
Powered by Wordpress   |   Lunated designed by ZenVerse