2012年03月30日

PHPでTwitter bot

Twitterを作る方法。

まずはTwitter Applications | dev.twitter.comでアプリケーション登録を行ない、abraham/twitteroauth - GitHub からOAuth認証用のライブラリをダウンロードします。あとは次のようなコードでTwitterに投稿できます。

<?php
require_once("twitteroauth.php");
$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);
$req = $to->OAuthRequest("http://api.twitter.com/1/statuses/update.xml","POST",array("status"=>"OAuth経由のツイートテスト"));
header("Content-Type: application/xml");
echo $req;
?>


via:PHP+OAuthでTwitter
タグ:PHP twitter
posted by ねこまんま at 18:34| Comment(0) | TrackBack(0) | 関数 | このブログの読者になる | 更新情報をチェックする

2010年11月28日

get_defined_functions

get_defined_functionsでは定義済みの関数を調べることが出来る。

この関数は2次元の連想配列を返し、key「internal」の値は組み込み済みの関数の一覧が配列で、key「user」の値にはユーザー定義関数が配列で入っている。

なんか使えそうな使えなさそうな、微妙な関数。
posted by ねこまんま at 22:07| Comment(0) | TrackBack(0) | 関数 | このブログの読者になる | 更新情報をチェックする

create_function

無名関数と似ているものにcreate_function関数があるが、これは可変関数の生成識である。

$newfunc = create_function('$a,$b', 'return "ln($a) + ln($b) = " . log($a * $b);');
echo "New anonymous function: $newfunc\n";
echo $newfunc(2, M_E) . "\n";


この場合、$newfuncにはユニークな関数名が格納され、関数の実態はその関数名に設定される。関数は可変変数で実行できる。

$av = array("the ", "a ", "that ", "this ");
array_walk($av, create_function('&$v,$k', '$v = $v . "mango";'));
print_r($av);


コールバック関数としても利用可能だ。ただ、PHP5.3以降では無名関数を利用するのが良いだろう。

タグ:create_function
posted by ねこまんま at 22:02| Comment(0) | TrackBack(0) | 関数 | このブログの読者になる | 更新情報をチェックする

call_user_func()とcall_user_func_array()

call_user_func()とcall_user_func_array()は可変関数を実行する為の関数。

可変関数とは次のような関数

function hoge($str1,$str2){
print "hoge";
}

$str = "hoge";
$str("hoge","hage");//hoge


このように関数名から関数が実行できる。

call_user_funcを利用すると同様のことが可能。

call_user_func("hoge","hoge","hage");


コールバック関数には無名関数も指定できる。

call_user_func(function(){
print "hoge";
},"hoge","hage");


任意のクラスも実行可能

class Foo{

public function foo1($val1,$val2){

}

public static function foo2($val1,$val2){

}

}


strictメソッドの場合はクラス名とメソッド名を配列で指定

call_user_func(array("Foo","foo1"),"hoge","hage");


スコープ演算子を利用してメソッドを実行することも可能。

call_user_func(Foo::foo1,"hoge","hage");


インスタンスからメソッドを実行も可能


var bar = new Foo();
call_user_func(array($bar,"foo2"),"hoge","hage");


call_user_func_array関数では第2引数に配列で引数指定が可能。

call_user_func_array("hoge",array("hoge","hage"));


call_user_func_array(array("Foo","foo1"),array("hoge","hage"));
posted by ねこまんま at 20:27| Comment(0) | TrackBack(0) | 関数 | このブログの読者になる | 更新情報をチェックする

関数の引数の型を指定するタイプヒンティング

タイプヒンティングとは関数の引数に渡される値の型を限定する方法

function hoge(array $hoge){

}


こうするとhogeに対して配列以外の型を引数として与えるとFatal Errorになります。

タイプヒンティングでは配列以外にも特定のクラスかどうかも指定できます。
posted by ねこまんま at 17:35| Comment(0) | TrackBack(0) | 関数 | このブログの読者になる | 更新情報をチェックする

2010年10月05日

splitとpreg_split

splitのリファレンスページを見ているとPHP5.3からは非推奨になったようです。結構使用頻度が高い関数だけに残念。

変わりに推奨されているのがpreg_split。

splitはregexつまりPosix拡張正規表現つまりPortable Operating System Interface for UNIX の略で、 Linux を始めとする Unix 互換OSが満たすべき仕様を定めた正規表現が利用できます。

ちなみにpreg_splitはperl互換の正規表現です。
タグ:Split preg_split
posted by ねこまんま at 03:34| Comment(0) | TrackBack(0) | 関数 | このブログの読者になる | 更新情報をチェックする

2010年06月12日

HTML要素を自動で取除くstrip_tags

via:10 PHP Code Snippets For Working With Strings


1.Automatically remove html tags from a string



フォーム送信時などに不必要なHTML要素を取除きたい場合はstrip_tags関数を使おう。

$text = strip_tags($input, "");
タグ:strip_tags
posted by ねこまんま at 22:10| Comment(0) | TrackBack(0) | 関数 | このブログの読者になる | 更新情報をチェックする

2010年04月29日

絶対パスを取得するrealpath

絶対パスを取得するrealpath

chdir('/var/www/');
echo realpath('./../../etc/passwd');


シンボリックリンク()をすべて展開し正規化した絶対パスを返します。

参考:PHP: realpath - Manual
タグ:realpath
posted by ねこまんま at 04:41| Comment(0) | TrackBack(0) | 関数 | このブログの読者になる | 更新情報をチェックする

2010年04月28日

error_logでエラーメッセージの送信

error_logはエラーメッセージの送信を行う関数です。

error_log(メッセージ  [,  エラータイプ  [,オプション]])


エラータイプは次の4種類から選ぶことが出来ます。

0:PHPのシステムログにメッセージを保存(デフォルト)
1:オプションで設定したメールで送信
2:このオプションは存在しません。
3:オプションで設定したファイルに書き込む
4:SAPIのログ出力に書き込む

参考:PHP: error_log - Manual
タグ:error_log
posted by ねこまんま at 15:21| Comment(0) | TrackBack(0) | 関数 | このブログの読者になる | 更新情報をチェックする

ディレクトリ内のファイル取得するglob

ディレクトリ内のファイル取得にはopendirを利用していたのですが、globという便利な関数があるのを知りました。

foreach (glob("*.txt") as $filename) {
echo "$filename size " . filesize($filename) . "\n";
}


パターンマッチを利用して取得するファイルを制限できます。

これは便利。

参考:PHP: glob - Manual
参考:PHPのglob()がすっごい便利だった件 - IDEA*IDEA 〜 百式管理人のライフハックブログ
タグ:glob
posted by ねこまんま at 01:47| Comment(0) | TrackBack(0) | 関数 | このブログの読者になる | 更新情報をチェックする

2010年04月24日

関数で静的変数を設定する

関数内で宣言されるローカル変数は関数の呼び出しが終了した時点で破棄されるが、staticを宣言すること静的変数となり破棄されず持続して利用できるようになる。

function hoge(){
static $count = 0;
return ++$count;
}
print hoge();//1
print hoge();//2
print hoge();//3


静的変数はstatic宣言時に初期化される。
タグ:static PHP
posted by ねこまんま at 15:07| Comment(0) | TrackBack(0) | 関数 | このブログの読者になる | 更新情報をチェックする

関数の引数を動的に定義

関数の引数の数が定まらない場合はfunc_get_argsを利用し次のように制御します。

function hoge(){
$num =func_num_args();//3
$args = func_get_args();//["aaa","bbb","ccc"]
}
hoge("aaa","bbb","ccc");


ただ次のように配列を利用して引き渡す方法のほうがスマートかも

function hoge($args){
$num =func_num_args();//3
print_r $args;//["aaa","bbb","ccc"]
}
hoge(array("aaa","bbb","ccc"))

posted by ねこまんま at 02:11| Comment(0) | TrackBack(0) | 関数 | このブログの読者になる | 更新情報をチェックする

2009年11月21日

mysql_list_dbs

現在利用できるDBのリストを取得できる関数。

$db_list = mysql_list_dbs();
while ($row = mysql_fetch_object($db_list)) {
echo $row->Database . "\n";
}

こんな感じでおk
タグ:mysql_list_dbs
posted by ねこまんま at 20:24| Comment(0) | 関数 | このブログの読者になる | 更新情報をチェックする

2009年09月30日

hash_hmac をPHP4で利用するライブラリ

Amazon Product Advertising APIをPHPで利用する方法は前回かいたんだけども、その際に利用しているhash_hmac関数はPHP 5.1.2 以上の関数なのでそれ以前のバージョンでは利用できない。

どうしようかなと思ったら、対応するライブラリを書いている方がいました。

PHP4 で HMAC-SHA256 などの hash_hmac() 関数を使えるようにする

感謝!
タグ:hash_hmac
posted by ねこまんま at 00:41| Comment(0) | 関数 | このブログの読者になる | 更新情報をチェックする

2009年09月21日

unserializeでエラー

serializeしたデータをunserializeした所、以下のようなエラーが

Warning: unserialize() [function.unserialize]: Node no longer exists in /


simplexml_load_fileでsimpleXmlオブジェクトに変換したデータを配列に入れてserializeしたのが原因でした。

(string)$value->title;

とかでキャストしてあげればOK

参考:PHPで型変更 - とあるWEBクリエイターのblog
posted by ねこまんま at 16:21| Comment(0) | 関数 | このブログの読者になる | 更新情報をチェックする

2009年09月19日

SimpleXMLで名前空間を扱う

phpのSimpleXMLで名前空間を扱う - とあるWEBクリエイターのblog

さすがにひどいのでもう少し調べてみた。

$nodeOpenSearch = $node->children('http://a9.com/-/spec/opensearchrss/1.0/');
$nodeOpenSearch->totalResults


childrenメソッドで名前空間を指定してノード?オブジェクト?を取得します。

名前空間はxmlnsで定義されてるはず。

xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/'
posted by ねこまんま at 22:29| Comment(0) | 関数 | このブログの読者になる | 更新情報をチェックする

simplexmlの@attributes

とあるXMLファイルをsimplexmlでパースした所見慣れない結果が。

var_dump(simplexml_load_file($url))


["category"]=>
array(10) {
[0]=>
object(SimpleXMLElement)#18 (1) {
["@attributes"]=>
array(2) {
["scheme"]=>
string(37) "http://schemas.google.com/g/2005#kind"
["term"]=>
string(43) "http://gdata.youtube.com/schemas/2007#video"
}
}



「@attributes」は

->@attributesでも[@attributes]でも取得できません

$value->attributes()->term;


なんて形で取得するのが正解らしい。
posted by ねこまんま at 22:22| Comment(0) | 関数 | このブログの読者になる | 更新情報をチェックする

2009年07月23日

setlocale

setlocaleはローカル設定を変更するための関数

setlocale(LC_ALL,'ja_JP.UTF8');

特にPHP5以降でfgetcsvがローカル設定を元に処理を行う為、CSVファイルとローカル設定を明示的に統一するためなんかに利用する
タグ:setlocale
posted by ねこまんま at 00:00| Comment(0) | 関数 | このブログの読者になる | 更新情報をチェックする

2009年07月22日

unsetでメモリ開放

unset関数でメモリ開放

通常はあまり考えなくて良いかもしれないけど多量のデータを取り扱う場合は適時開放しておいたほうがよさげ
タグ:unset
posted by ねこまんま at 23:58| Comment(0) | 関数 | このブログの読者になる | 更新情報をチェックする

2009年07月13日

gzip圧縮を利用したキャッシュか

特定のファイル($url)をgzip圧縮しておいて、gzip圧縮がある場合はそちらを参照、ない場合はgzip圧縮してあげる方法

//キャッシュ化
$file = "./cache/".rawurlencode($url).".gz";
if(@file_exists($file)){
$fp = gzopen($file,'r');
//圧縮ファイルの読みこみ
do {
$data = gzread($fp, 10000);
if (strlen($data) == 0) {
break;
}
$xml .= $data;
} while(true);
//圧縮ファイルのクローズ
gzclose($fp);
}else{
$xml = @file_get_contents($url);
if(!$xml) exit;
$fp = gzopen($file,'w9');
gzwrite($fp,$xml);
gzclose($fp);
}
posted by ねこまんま at 15:20| Comment(0) | 関数 | このブログの読者になる | 更新情報をチェックする