「プログラム」カテゴリーアーカイブ

XMLファイルで、ある要素の中に同じ名前の要素が2個ある場合の取り出し方

久しぶりにPHPでXML使ったら使い方忘れてた。以下メモ。
例えば、下のようなimagesという要素の中に、imageのという同じ名前の要素が2つある場合。その中身を取り出す時どうするか。

<images>
<image>テスト1</image>
<image>テスト2</image>
</images>

1個目の「テスト1」を取り出したい場合は。

$sss=$It->images->image[0];

2個目の「テスト2」を取り出したい場合は。

$sss2=$It->images->image[1];

でOKだった。

普通にループさせてる中で

$sss=$It->images->image;

で取り出して配列から、また取り出せそうとしたけど、上手く行かなかった。最初のやり方が簡単だった。

データベースのデータを定期的に順番に利用する

例えば、MYSQLデータベースのデータを1番から順番に(順番にの部分が重要)、1日10個ずつ利用するためにはどうしたらいいか調べた。
実際に選んだのは、カウンターとCRONを使った方法。
まず、実行ファイルは、CRONで一日一回動かす。
これはやり方は簡単なので省略。
次に、データベースから順番にデータを取り出す方法。
順番に取り出すには、連続性を持たせるために、取り出したデータの順番をどこかに一旦保存しないといけない。
そのために外部にテキストファイルを作って置いて、そこでカウンターを動かしてやることで、データの順番の記憶に使える。
PHPの場合は、実行ファイルの中に、以下を入れておき、同じ場所にcount.txtという空白のテキストファイルを置いてあげる。

$file_pointer = @fopen(“count.txt”,”r+”);
if(flock($file_pointer, LOCK_EX)){
$count = fgets($file_pointer, 65);
if(!isset($count) or !is_numeric($count)){
$count = 0;
}
$count++;
rewind($file_pointer);
fwrite($file_pointer, $count);
flock($file_pointer, LOCK_UN);
}else{
echo “失敗”;
}
fclose($file_pointer);

内容はテキストファイルを開いて、中の数字を取り出し、1を足して、新しく書き換えて保存するというもの。

このプログラムで、count.txtの中の数字が、プログラムがCRONで実行されるたびに1づつ増えていき、1,2,3,4,5,・・・となる。
この数字を利用すると、データを毎日順番に取り出して利用することができる。

$count++;

の部分を

$count–;

とすると、逆に一個ずつ減らすことも可能。
他にも方法があると思うけど、取り敢えず今はこの方法がお手軽なので使ってみた。

phpのバージョンアップ関連で出るエラー

手元のパソコンで使う用のPHPで自作したツールがいくつかあるんだけど、新しいパソコンにプログラムを移してPHPの環境作ったらエラーが頻発。
phpのバージョンが新しくなったことによるエラーだった。

Notice: Trying to get property of non-object in ~

のエラーが一番多かった。上のエラーで検索すると、エラーが画面表示されてるサイトがたくさん出てくる。自動的にPHPのバージョンがあがるサーバーなどだと、エラー出てもそのまま放置されてるサイトが多いみたい。上のエラーは何かの処理がバージョンアップに伴い、厳密に処理されることによる発生するようになったらしい。私の場合はエラーが出ても機能自体はすべて問題なく動いてる。でもエラー表示が邪魔なんで、結論だけ書くと、エラーが出てる行の前に@をつけてエラー表示しないようにするととりあえずすべて解決(ほんとはエラーでないように書きなおす方がいいんだろうけど)。他にもいくつかバージョンアップに伴うエラー表示があったけど、全部@を付けるだけで解決した。

アマゾンのAPI変更関連

この前アマゾンからメールが来ていて2012年2月22日からAPIの仕様変更がある、というのは知ってたんだけど、自分には関係ない内容だったのでスルーしていた。

それが、最近、エラーが出てるのを見つけた。調べてみると、返ってくるレスポンスの名前空間に入っている日付が以下に変更になっていた。

http://webservices.amazon.com/AWSECommerceService/2005-10-05

http://webservices.amazon.com/AWSECommerceService/2011-08-01

ここが変わるとは思わなかった・・・。
ツール使って、一括置換でなんとかなったけど、まだ見逃してる箇所があるかも。

python版のGAEをeclipseで

python版のGAEで何か作るとき、eclipseを使うとかなり時間と手間が省略できる。
使い方も今は簡単になっていて設定は10分くらいでできた。

(まずpython本体を入れていなければインストール)

eclipseのダウンロード

eclipseを立ち上げ、プラグインのPyDevをインストール

新規プロジェクトのその他のところにPyDevが出てくるから、そこを選ぶと、Google App Engineプロジェクトが出てくるので選択。

あとは、実行ボタンで、プログラムを動かせて、8080にてブラウザで動作確認できる。アップロード等もeclipseからできる。