ポケモン立体図鑑ARマーカーメーカー

昨日からポケモン立体図鑑で遊んでいますが、今日はPHPを使って「ARマーカーメーカー」を作ってみました。 (さらに…)

スタニッキの体重グラフを自作した

スタニッキという、Twitterでの自分の発言をまとめるサイトを作っています。
ここに体重グラフを表示するページがあります。
グラフの作成にはGoogleチャートを使っていました。
GoogleチャートはURLを正しく与えるとグラフを作成して返してくれるサービスですが、体重の記録をすべて残しているため、URLが長くなってきました。
URLに使える文字は2083字までなのですが、私のグラフのURLは既に2000字近くあります。

というわけで、体重グラフをPHPを使って自作することにしました。

相変わらずそっけないですが、見やすくできたと思います。
これならばデータ量がどんなに増えても大丈夫です。

スタニッキ-体重

PHPで描画するときの座標

PHPで長方形を描くときは、塗りつぶす場合は「imagefilledrectangle」、塗りつぶさない場合は「imagerectangle」を使います。 (さらに…)

PHPでGoogle Image Search APIを使う

自分のウェブサイトにキーワードに関連した画像を貼り付けたいと思います。
Googleのイメージ検索(Google Image Search API)を使い、PHPで取得する方法を使います。

API Keyの取得

APIを使うには自分自身のKeyを取得する必要があります。
ここでは関係ないですが、このKeyは他の検索でも同じものを使うことができます。

URL

検索のためのURLを与えるとJSON形式で検索結果が戻ってきます。
基本的なURLは次の通りです。
vはバージョンです。今のところ1.0だそうです。
keyには自分のAPI Keyをセットします。
qには検索語をセットします。日本語のときはURLエンコードする必要があります。また「hl=ja」を付けるとよいでしょう。
具体的な使い方は後述します。 (さらに…)

PHPでJSONを使う

PHPでJSONを使う場合について、まとめます。

前提

前提は次の通りとします。
太郎と次郎がいて、それぞれidとnameを持っています。
次郎には子供がいて(春子、夏子)、それぞれnameを持っています。 (さらに…)

PHPで組合せをすべて表示

PHPで数学の「組合せ」をすべてリストアップするコードを書いてみました。

「組合せ」とは、n 個からm 個を選ぶ場合のすべてのパターンのことで、そのパターンの数は
=n!/(m!(m-n)!)
で表されます。
例えば、「1,2,3,4,5,6」という6個から4個を選ぶ場合には
1234、1235、1236、1245、1246、1256、1345、1346、1356、1456、2345、2346、2356、2456、3456
という15通りのパターンができます。 (さらに…)

PHPでTwitterに投稿する方法

先日、PHPを使ってはてなハイクに投稿する方法を書きましたが、Twitterに投稿する方法も書いておきます。
詳しくはPHP+OAuthでTwitter - SDN Project(リンク切れ)に書かれています。ありがとうございました。

準備

「OAuth.php」と「twitteroauth.php」が必要になります。abraham/twitteroauth - GitHubからダウンロードします。
以下に書くコードと同じフォルダに入れておきます。

サンプル

$st="投稿の本文";
twitterPost($st);

ツイートする内容をセットして実行します。
ボットにする場合はこの辺りを改造します。

function twitterPost($st){
  require_once("twitteroauth.php");
  $to=make_oauth_object();
  $url="https://twitter.com/statuses/update.xml";
  $result = $to->OAuthRequest($url,"POST",array("status"=>$st));
  header("Content-Type: application/xml");
  echo $result;
}

実際に投稿する部分です。
「$url」などを書き換えると、フォローしたりファボったりする関数に書き換えられます。

function make_oauth_object(){
  $consumer_key = "{Consumer keyの値}";
  $consumer_secret = "{Consumer secretの値}";
  $access_token = "{Access Tokenの値}";
  $access_token_secret = "{Access Token Secretの値}";
  $to = new TwitterOAuth(
    $consumer_key,
    $consumer_secret,
    $access_token,
    $access_token_secret);
  return($to);
}

OAuth認証の部分です。

OAuth認証

TwitterはOAuth認証を使います(はてなハイクはベーシック認証)。
この手続きが面倒なところですが、一度やればすぐに分かると思います。
https://twitter.com/oauth_clientsで登録して、「Consumer keyの値」「Consumer secretの値」「Access Tokenの値」「Access Token Secretの値」を入手します。
これを上のコードの該当箇所にセットしてください。
ちょっと書き換えて「twitterPost()」に直にセットしてもよいのですが、使い回しを考えると別の関数にしておいた方がよいと思います。

PHPで「はてなハイク」へ投稿

PHPで、はてなハイクのボットを作ることにしました。
Twitterのボットは作ったことがあります。
しかし、はてなハイクと認証の方式が違います。Twitterの投稿はOAuth認証ですが、はてなハイクはベーシック認証です。

ネットで調べて見つけたのがこちらのページ。
はてブの WebHook を利用して PHP スクリプトではてなハイクに投稿するサンプル - カミクズヒロイ /bin
そのものズバリのサンプルが載っていたので、そのまま使わせていただきます。ありがとうございます。

サンプル

function haikuPost($st, $kw, $id, $pw, $src, $url){
  require_once 'HTTP/Request.php';
  $req = &new HTTP_Request();
  $req->setURL($url);
  $req->setBasicAuth($id, $pw);
  $req->setMethod(HTTP_REQUEST_METHOD_POST);
  $req->addPostData('keyword', $kw);
  $req->addPostData('status', $st);
  $req->addPostData('source', $src);
  $req->sendRequest();
  return $req->getResponseBody();
}

説明

  • $st
    投稿の本文です。
  • $kw
    キーワードです。はてなハイクは投稿の本文だけでなく、タイトルのようなキーワードを付けることができます。
    なお、この項目を省略し、投稿の本文を「キーワード=本文」とすることでもセットされるようです。
  • $id
    はてなハイクのユーザーIDです。
  • $pw
    はてなハイクのパスワードです。
    はてなハイク - APIで調べます。
  • $src
    クライアント名をセットします。実際ははてなハイクのキーワードを指定します。
  • $url
    「http://h.hatena.ne.jp/api/statuses/update.format」をセットします。「format」のところは「json」や「xml」をセットします。情報をどのように取得するかが問題になりますが、投稿の場合は帰ってくる情報はさほど重要ではないかもしれません。詳しい使い方ははてなハイク - APIで確認して下さい。

これらを適当にセットして次のとおり書けば投稿できます。

$result = haikuPost($st, $kw, $id, $pw, $src, $url);
echo $result;

補足

気になったのは「HTTP/Request.php」の部分。
「PEARのHTTP_Requestとやらをインストールしなければならない?」と思い、色々調べましたが、分かりません。
私はロリポップのレンタルサーバを使っているのですが、「ひょっとすると元からインストールされているのかも」と思い、試しに上のサンプルを実行したところ、投稿できてしまいました。

PHPの連想配列でソート

PHPで次のようなデータがあったとします。

value id
50 1
30 2
60 3
10 4

これをvalueの列の値でソートすることを考えます。
array_multisortを使いますが、基本的な使い方から説明します。

基本な使い方

valueの列とidの列の二つの配列があると考えます。

$ar1 = array(50,30,60,10);
$ar2 = array(1,2,3,4);

この二つの配列は要素の数が同じで対応しています。
array_multisortを使うと、片方の配列をソートし、もう片方の配列は対応関係を崩さずに並び変わります。

array_multisort($ar1, $ar2);

これにより次のような状態になります。

$ar1 = array(10,30,50,60);
$ar2 = array(4,2,1,3);

連想配列に応用

先ほどのデータが次のように連想配列に入っているとします。

$data[0]["value"] = 50;
$data[1]["value"] = 30;
$data[2]["value"] = 60;
$data[3]["value"] = 10;
$data[0]["id"] = 1;
$data[1]["id"] = 2;
$data[2]["id"] = 3;
$data[3]["id"] = 4;

これをvalueの値でソートすることにします。
array_multisort を使うのですが、いきなり代入することができないので、仮にソート用の配列 $sortkey を作ります。

foreach ($data as $key => $row) {
    $sortkey[$key] = $row["value"];
}

これにより次のような状態になります。

$sortkey[0] = 50;
$sortkey[1] = 30;
$sortkey[2] = 60;
$sortkey[3] = 10;
$data[0] = array("value"=>50,"id"=>1);
$data[1] = array("value"=>30,"id"=>2);
$data[2] = array("value"=>60,"id"=>3);
$data[3] = array("value"=>10,"id"=>4);

ここで $sortkey と $data を array_multisort でソートします。

array_multisort($sortkey,$data);

これにより次のような状態になります。

$sortkey[0] = 10;
$sortkey[1] = 30;
$sortkey[2] = 50;
$sortkey[3] = 60;
$data[0] = array("value"=>10,"id"=>4);
$data[1] = array("value"=>30,"id"=>2);
$data[2] = array("value"=>50,"id"=>1);
$data[3] = array("value"=>60,"id"=>3);

結果的に連想配列である $data がvalueの値によりソートされたことになります。

VBAやJavaScriptなどの置換関数の引数の違い

VBAやJavaScriptなどには文字列を置換するための関数があります。
「これはペンです」の「ペン」を「鉛筆」に置換して「これは鉛筆です」に変換するようなケースで使います。

言語によって微妙に書き方が異なるので注意を要します。
私がよく使う、Excel、VBA、JavaScript、PHP、MySQLについて、比較してみました。

言語 関数
Excel SUBSTITUTE(文字列,置換前,置換後)
VBA Replace(文字列,置換前,置換後)
JavaScript 文字列.replace(置換前,置換後)※正規表現が使える。
PHP str_replace(置換前,置換後,文字列)または
preg_replace(置換前,置換後,文字列)※正規表現が使える。
MySQL REPLACE(文字列,置換前,置換後)

言葉の意味は次の通りです。
文字列「これはペンです」置換前「ペン」置換後「鉛筆」に置換

新しい記事 | 古い記事

タグ

カテゴリー

最近の投稿

最近のコメント

固定ページ

アーカイブ

stabucky

写真

メタ情報