2008-03-13

CakePHP 1.2 は、webservices に対応しない。

CakePHP アップデートで携帯ページ NG の件の「次回」は、割と早い時期にやってきそうです。

ソースコードリポジトリの 1.2.x.x ブランチのChangeset [6453] で webservices 関係がばっさり削除されてます。1.2 リリースでは、確実に別の実装を行わないとだなぁ。

これは、別件調べ事のついででした。それは、PostgreSQL を使っている場合に UPDATE 文に alias が入って失敗するというもの。

http://cakephp.jp/modules/newbb/viewtopic.php?post_id=1814&topic_id=934&forum=6

こちらでも議論がされていますが、1.2.0.6311-beta のはまりねたらしいです。部分的に差し替えようかと思ったのですが、変更範囲がかなり広い。幸か不幸か、携帯ページを使っていなかったので cake ディレクトリを HEAD Revision に全とっかえして、UPDATE 文は、通るようになりました。まだ、時間的に余裕があるから良いけど、今後も、こんなことはありそうだから、ユニットテストはきちんと書いておこう。

2008-03-12

CakePHP アップデートで携帯ページ NG

CakePHP で作成したサイトの携帯ページを CakePHP 携帯用ビューを表示する(Shin x blog さん) などを参考に実装していました。当初は、1.2.0.5875-pre-beta を使ってうまく行っていたのですが 1.2.0.6311-beta にアップデートしたところ、文字化けに見舞われました。念のため Subversion にブランチして作業していたのですぐに戻せるのですが、悔しいので少し調べてみました。

状況を落ち着いてみてみると、どうやら View は、webservice のものが選択されているが、Layouts が通常のものの模様。render まわりと当たりをつけて cake/libs/view/view.php を diff してみたら、かなり大幅に変ってる。他は、ほぼ問題ないので _getViewFileName と _getLayoutFileName のみに着目すると、やっぱり、webservices 判定が _getViewFileName にはあるが、_getLayoutFileName からはなくなってました。

@@ -821,6 +821,9 @@
}
$subDir = null;

+ if (!is_null($this->webservices)) {
+ $subDir = strtolower($this->webservices) . DS;
+ }
if (!is_null($this->layoutPath)) {
$subDir = $this->layoutPath . DS;
}


こんな修正で動くようにはなります。しかし、コアに変更入れるのは、さて、どうしたものか...



cake/libs/router.php には 「webservice は、非推奨で将来的にはサポートしなくなるよ。Router::parseExtensions() を使ってね。」という記述がありますね。1.2 系で作業始めたときも情報の少なさに「しくじったか?」とは、思ったのですが...



次回からがんばります。

2008-03-05

How to make an exhibit from data fed directly from a Google Spreadsheet

原文

Google Spreadsheet から直接供給されるデータから exhibit する方法

This tutorial shows you how to feed data directly from a Google Spreadsheet rather than from a file. The advantage of this is that you can edit your data in Google Spreadsheets' user interface. Here is an example.

Formatting the Data

You need to make sure that your Google spreadsheet follows a particular format, which can be seen here:

あなたはあなたの Google スプレッドシートが特定のフォーマットに従うことを確認する必要があります。そして、それはここで見ることができます:

 http://spreadsheets.google.com/pub?key=pLvsUS-CftHo21r-0xjKvVA


The first row contains the property names wrapped in {}. You can specify the value type for a property, e.g., {rating:number}. You can have multiple values for each field and they should be separated by semicolons, e.g., "Drama; Epic". If you want to tell Exhibit not to split a field by semicolons, add ":single" to the column header, e.g., {plot:single}.



最初の行は、{} の中に包まれたプロパティ名を含みます。プロパティの型を定義することも出来ます、例えば、{rating:number}。複数の値を同一フィールドに持つことができ、それらは、セミコロンで区切られます、例えば、"Drama; Epic"。もし、セミコロンでフィールドを分割しないよう Exhibit に指示したい場合は、カラムヘッダーに ":single" を追加してください、例えば、{plot:single}



Important note! Be sure to make the first column {label}. Otherwise Exhibit will use what it finds in cell A1 as {label}, since the Google Spreadsheet export format does not convey the data listed in that cell.



重要な注意! 必ず最初のカラムとして{label}を作って下さい。さもないと、Google スプレッドシートエクスポート形式がそのセルにリストされたデータを伝達しないので、Exhibit は、A1 セルで見つけたものを {label} として使います。



Getting the Feed



First, open your Google spreadsheet and then click on the Publish tab on the right. If it's not published yet, click Publish Now. Then you will see something like this:



まず最初に、あなたの Google スプレッドシートを開き、次に、右の方の Publish タブをクリックしてください。 まだ発行していない場合は、 Publish Now をクリックしてください。 すると、あなたはこのような物を見るでしょう。



 Publish at: http://spreadsheets.google.com/pub?key=pLvsUS-CftHo21r-0xjKvVA


Click on the URL to get a new window with your spreadsheet in view only mode.



URL をクリックすると表示のみモードのスプレッドシートの新しいウィンドウが開きます。



For Firefox


If you're using Firefox, right click anywhere on the page and choose View Page Info. Then click on the Links tab, and look for a row in which Name is "alternate", Type is "Related Item", "Address" looks something like this:



 http://spreadsheets.google.com/feeds/list/o08841867754116283182.6102151849127695926/od6/public/basic


Right click on that row and choose Copy. Then close the dialog box. What you've copied is the URL of the feed of the spreadsheet.



For Internet Explorer


Right click somewhere on the page and choose View Source. Then use the source editor's Find command to search for "feeds". That should land you in the middle of the feed URL. Copy that URL to the clipboard and close the source editor.



Setting up the Exhibit



To link in your data, paste in that feed URL and append ?alt=json-in-script to it. Then, make sure the data link has type="application/jsonp" (note the "p") and ex:converter="googleSpreadsheets":



 <link rel="exhibit/data" 
type="application/jsonp"
href="http://spreadsheets.google.com/feeds/list/o08841867754116283182.6102151849127695926/od6/public/basic?alt=json-in-script"
ex:converter="googleSpreadsheets" />


This is assuming that you are using Exhibit version 2.0.



Re-publishing



You can set your Google Spreadsheet to re-publish every so often, or you have to manually click the Re-publish button in Google Spreadsheets.



But that's it!