いつもー苦労する。
SimpleXMLクラスってなんであんなに使いにくいの!
使いにくい一番の原因は serializable じゃない、って事。
twitterのAPI叩いてStatusをxmlで取得するんだけど、普通にこれをDBに保存しときたいのね。
で、毎回、この変なクラスからスタンダードな、シリアライズできるオブジェクトに変換する関数を書いてたんだけど。ここにきれいに書かれてるソースがあったから、メモ。
http://techblog.yahoo.co.jp/web/yahoo/post_1/
ちゃんと使えそうであります。
(注)
最近は、serializeを使った簡単クラス変換 でやってますwww
write a note about troubles of programming,working day by day. ま、日々仕事でつまづいた事をメモ書き程度にまとめていきますよー。
2010年8月3日火曜日
2010年7月28日水曜日
Windowsでの機種依存文字の文字化け
根が深そうな割に簡単に片付いたのでメモ。
今回のシステムは、
という構成で、LinuxからWindowsのDBを叩く、というもの。
当然、文字コードも、WindowsはSJISだし、LinuxはUTF-8だし、で変換してあげないといけない。
で、普通に変換かけてたんだけど、(株)とかの機種依存文字が化けちゃう。
色々試してみたところ、
文字コードの指定、SJISじゃだめなのね。知らんかったよ。
今回のシステムは、
MS SQL Server
(Windows)
|
apache + php
(Linux)
|
API Server
(Linux)
という構成で、LinuxからWindowsのDBを叩く、というもの。
当然、文字コードも、WindowsはSJISだし、LinuxはUTF-8だし、で変換してあげないといけない。
で、普通に変換かけてたんだけど、(株)とかの機種依存文字が化けちゃう。
色々試してみたところ、
mb_convert_encoding($str, "UTF-8", "SJIS");じゃなくって、
mb_convert_encoding($str, "UTF-8", "sjis-win");でやれば、機種依存文字もきれいに変換してくれるみたい。
文字コードの指定、SJISじゃだめなのね。知らんかったよ。
PHPのスコープ演算子 self:: と static::
class A {さて、こういうクラスがあったとしましょう。
static function getInstance() {
}
protected function A2B() {
echo "A";
}
public function _test() {
self::A2B();
}
}
class B extends A {
public function A2B() {
echo "B";
}
public function test() {
self::A2B();
}
public function test2() {
self::_test();
}
}
A::test();この結果はどうなるでしょうか?
A::test2();
結果は
Bとなるはず(試してません)です。
A
クラスの中で self:: というスコープ定義を使用した場合、あくまでも「自分」を参照します。ですから継承先(B)から関数を呼び出しても、その関数が継承元(A)の関数であれば、self:: は A:: と等価です。
では、継承元(A)から継承先(B)を参照したい場合はどうすればよいのでしょうか?
最近、テーブルクラスの汎用化を行う際に梃子摺った問題で、いまだに解決できていません。
phpのバージョンが 5.3以上であれば、self:: のかわりに static:: を使うことで、呼び出し元のクラスを参照することができるようです。
クラス関数を静的(static)な実装にしてしまっているので、コンストラクタで呼び出し先のクラス名を渡す、などの操作もできず。
困りました。
コアインスタンスだけは動的に生成するようにしようか・・・
2010年7月27日火曜日
Microsoft SQL Server
ついにきました。MSSQLいじる仕事。
これまで頑張って避けてたのにな。
それはいいとして。早速テスト。
$conn = mssql_connect('172.16.1.10\Instance01', 'sa', 'pass');
で、エラー。どうやらサーバーの指定に間違いがあるらしい。
マニュアルには、'サーバー名\インスタンス名' って書いてあるし、そのとおりにしてみたんだが。
検索してみると、ここに指定するサーバーの名前は、interfacesファイルに記載されていなければならない、とか。
Free TDS? Interfaces??
なんじゃそりゃ。
さっぱりわからんまま、マニュアル読んでたら、IPアドレスとポートだけで接続先指定してるケースもあった。
とりあえず、IPアドレスだけにしてみる。
$conn = mssql_connect('172.16.1.10', 'sa', 'pass');
つながったwww
わけわからん。
これまで頑張って避けてたのにな。
それはいいとして。早速テスト。
$conn = mssql_connect('172.16.1.10\Instance01', 'sa', 'pass');
で、エラー。どうやらサーバーの指定に間違いがあるらしい。
マニュアルには、'
検索してみると、ここに指定するサーバーの名前は、interfacesファイルに記載されていなければならない、とか。
Free TDS? Interfaces??
なんじゃそりゃ。
さっぱりわからんまま、マニュアル読んでたら、IPアドレスとポートだけで接続先指定してるケースもあった。
とりあえず、IPアドレスだけにしてみる。
$conn = mssql_connect('172.16.1.10', 'sa', 'pass');
つながったwww
わけわからん。
2010年7月23日金曜日
BIGINTとjson_decode
今日 phpのドキュメント見てたら、json_decode の引数に option を渡せるんだってね。
で、指定できる値が
JSON_BIGINT_AS_STRING
なんてこったい。64bit化されたtwitterのID値もこれで文字列として取り込めたのか。
ちゃんとドキュメント読んでませんでした。
うわーー無駄な労力使っちゃったよーー!!
で、指定できる値が
JSON_BIGINT_AS_STRING
なんてこったい。64bit化されたtwitterのID値もこれで文字列として取り込めたのか。
ちゃんとドキュメント読んでませんでした。
うわーー無駄な労力使っちゃったよーー!!
2010年7月22日木曜日
【twitter API】RT/@/DMの取得
あるtweetへの返信(@)は、
また、公式RT(RTされた自分のtweet)は、
で、問題は非公式RT。いわゆるQTとかも含めて。
これは、調べてみたところ、普通に@として取得できるようだ。
なので、システム上、非公式RTと通常のRT,@を区別して扱いたければ、取得した@をうまくふるいにかけて分類してやる必要がある。
一般的に、非公式RTは、
「@として取得できたtweetのうち、@の前に"RT"が付く」
「@として取得できたtweetのうち、@の前に"QT"が付く」
というようなフィルタリングでだいたいいけると思う。
なので、
こんな感じ?で分類できるのかな?試してないけど。
$twitter->statuses->mensionsで取得できる。
また、公式RT(RTされた自分のtweet)は、
$twitter->statuses->retweets_of_me、ダイレクトメッセージは
$twitter->direct_messagesだ。ここまでは誰でもできそう。
で、問題は非公式RT。いわゆるQTとかも含めて。
これは、調べてみたところ、普通に@として取得できるようだ。
なので、システム上、非公式RTと通常のRT,@を区別して扱いたければ、取得した@をうまくふるいにかけて分類してやる必要がある。
一般的に、非公式RTは、
「@として取得できたtweetのうち、@の前に"RT"が付く」
「@として取得できたtweetのうち、@の前に"QT"が付く」
というようなフィルタリングでだいたいいけると思う。
なので、
$statuses = $twitter->statuses->mensions();
foreach ($statuses as $status) {
if (preg_match('/(RT|QT) *@/', $status->text)) {
$memsions['QT'][] = $status;
} else {
$mensions['@'][] = $status;
}
}
var_dump($mensions);
こんな感じ?で分類できるのかな?試してないけど。
登録:
投稿 (Atom)