最近やってること – RRS配信してないページのRSSを勝手に作る

きっかけは、RSSどうこうと言うことよりも、むしろ、ちらっと目にしたWeb::Scraperのお話。 miyagawaさん謹製のモジュールでCPANに上がってるらしい。 Web::Scraper – Web Scraping Toolkit inspired by Scrapi – search.cpan.org Web::Scraper – naoyaのはてなダイアリー Web::Scraperが便利すぎて困るの巻 (CodeZine編集部ブログ) やれることは、ざっくり言うと、 タグやclass名、IDなんかに紐づけて要素を引っ張ってこれる、ということみたい。 つまりは、これさえあれば、最近の、 classやidがきっちり指定されたhtmlからなら、 欲しいデータを楽に取得できると言うことなのだけど、 んーあいにく僕の主戦場はPHP。 もちろん、Web::Scraper組み込んで書いたPerlプログラムを走らせておいて、 RSSの配信の部分だけPHPで実装するか、 ないしはPHPなんかやめて、RSSも静的なXMLファイルにすればいいじゃない、 そんな感じが多分常識的な判断なのだと思うけども、 いや、なんか、HTTPリクエストも含めて何か書いてみたかったんです。はい。 車輪の再発明になるのはよく分かってるけどさ。

続きを読む

FusionChartsで折れ線グラフ。

何か、簡単に折れ線グラフが作れないかなぁと思って、 今までに色々試してみたのだけど、 GDを利用するような、つまりモジュールをサーバにインストールするようなタイプだと、 クリアする課題が多くて、なかなか簡単にいかずに悩んでました。 (やればできるんだろうけれども) まいいかなーと半ば諦めていたら、 今日のidea*ideaでこんな特集が。

ちょっと調べ物をしていたので結果をシェア。ウェブでかっこいいグラフ(← 主観)を描画するためのライブラリやらテクニックやらのまとめです。
 
と、いうわけで、やってみた。

続きを読む

旧暦計算ライブラリ。

ふとした世間話の中で、 六曜(大安とか、仏滅とか)ってどうなってるんだろう?と思って 調べてみたら、意外に簡単な計算方法だった。

(旧暦の月 + 旧暦の日) / 6 の余りが 0 → 大安 1 → 赤口 2 → 先勝 3 → 友引 4 → 先負 5 → 仏滅
へー。 それなら、カレンダーを書くときに、付けられるなぁ… と思ったけれど、旧暦の計算方法がわからない。 調べてみると、妙に難しい… それでも、Perlで使う場合には、『旧暦計算ライブラリ』という便利なプログラムがあり、 これを利用すれば、簡単に計算できます。 旧暦計算ライブラリ(Perlによる旧暦計算プログラム) これは、高野 英明さんという方が作成された、 AWK版旧暦計算サンプルスクリプト、『QRSAMP』の、 Perl移植版です。 Perlということで、MovableTypeにも当然利用でき、 いろんな和暦を利用できるようになるプラグイン、 MT 和風日付表示プラグインを作成されている、 muraさん作成の旧暦表示プラグインにも利用されているようです。 で、じゃあこれのPHP版作るか、と思って手を付けてみたのだけれども、 当然だが、激しくめんどくさい(笑) 探したら…ありました。 スクリプト ダウンロード(旧暦計算phpスクリプト) 見た感じ、体裁は全くいじらずに、忠実にPHPに移植した物のようです。 個人的には、データのやりとりなどいじりたいところなんですが… (年月日ではなくて、UNIXタイムスタンプで渡したかったり) 取り敢えずこれがあれば、PHPでも旧暦入りのカレンダーが作れます。 さて、手を入れるか。 (配布の権利関係は極めて微妙だけど)

続きを読む

半角英数をチェックする。

正規表現を使って、半角英数をチェックする。 基本的には、[a-z]、[A-Z]などを利用する。

  • 半角英字:[a-z][A-Z]
  • 半角数字:[0-9]または\d
  • 半角英数字:[a-zA-Z0-9]

使用例

if(preg_match("/^[a-zA-Z0-9]+$/", $str)){
  print "すべて半角英数である";
} else {
  print "すべて半角英数ではない";
}
半角記号までチェックする場合には、ASCII文字コード表を参考に設定する。 ASCII.jpg 例えば、[!-/]と設定すれば、!から、/までの記号を表現することが出来る。 これを参考に、半角の英字、数字、記号を表現すると、[!-~]となる。

使用例

if(preg_match("/^[!-~]+$/", $str)){
  print "すべて半角英数記号である";
} else {
  print "すべて半角英数記号ではない";
}
以上、メモ。

続きを読む

PHPにおけるファイルロック

PHPでは、ファイル読みだし・書き込みの際のロック関数が、 Perlに比べて強固(あくまで体感レベルの話だが)なので、 よくあるような、ロックファイルやディレクトリを用いたロック機構が導入されることは少ない。 実際、仕事で使用しているアクセスプログラムでも、特別なロック機構は装備していないが、 1アクセス/8秒というような状況でも(または意図的に更新ボタンを連打しても)データが飛んだことはない。 Perlで作成していた頃には、アクセスが集中すると飛んだことがあったから…ずいぶんと違う。 (もちろん、プログラムの構成スキルも上がっているのかもしれないが) とはいえ、全く何も対策をせず、関数だけに任せっきりと言うのではさすがに心許ない。 というわけで、既存のロック機構を補強する策を模索してみた…が。 正直言って、これと言って見当たらなかった。 まぁ確かに、flockが使えないPHPというのもかなり限られてくる(バージョン3.0.7未満)し… しかし、指示をより正確にして、機構を補強するという意味で、 以下のようなページを発見したので、転載しておきます。 PHP:ファイルのロック方法(排他制御)の例:WEB Artisan – ウェブ アルチザン んー、このままでいいんかなー… 有名カウンターとかどうしてんだろ?その辺。

続きを読む

[PHP] GDって便利ですねぇ…

存在は知ってたんだけど、仕事のサーバでのPHPのコンパイルが上手くいかなかったこともあって、 実際には使っていなかった、GD。 でもまぁよくよく考えたら、コンパイルでこけてたのはFreeType(日本語関連)だったので 別に画像の処理に関しては問題ないでしょ、ということでやってみた。 そもそも、NOBODY:PLACEはレンタルサーバだし、 その辺のインストールは問題ないわけだからね(多分) 基本的には、 1) 画像をデータとして読み込む 2) 画像データを加工 3) 保存するための新しい画像データを作成 4) 加工済みデータをそこへ放り込む 5) 出力 という認識でよいかと。 出力先がブラウザなら、アクセスの度に表示するプログラムになるし、 ファイルなら、サムネイルを作成するプログラムになる、と。 (この辺の関数に関しては、マニュアルの『XLI. イメージ関数(image)』に詳しいです) 追記に、このサイトで実際使ってる、(かなりいい加減な)プログラムを載せておきました。 幅・高さを検討しているところと、画像の形式によって使う関数を振り分ける処理が入ってますが、 まぁ、基本的には大したことやってません。 決められた幅(または高さ)まで画像を縮小するだけですな。 ちなみに仕事でこれをどう応用したかというと、 本来の目的の前の試験段階として、携帯でジャケ写が見られるようにしてみました。 ジャケ写のファイルは全てjpegで、かつジャケ写によってはファイルサイズがまちまちなので、 今まで実装は不可能だと思ってきたんだけど… GD使って処理してやれば簡単じゃん、ということに気づき。 しかし、なんだろう、加工済みの画像データ長を取得する関数が見つけられなくて、 本当は、ファイルサイズから縮小処理をしたかったんだけど無理なようで… 仕方無しに、現在は試験版として、幅で縮小処理してます。 (pngで出力するとやたら大きくなるのが気になるけど) てか、気付きつつあるんだけど、これ使えば、画像連結用プログラム(gifcat.php)使わなくても 一つの画像としてカウンターを表示できるんじゃ無かろうか? しかも文字でも出来るんじゃなかろうか? そしてフォントも変えられるんでは。 うーむ。時間見つけてやってみます。 GD、便利。

続きを読む