Google Fusion Tablesでの䜜業-JSおよびPHP

抂芁問題が発生したした-非垞に限られたサヌバヌリ゜ヌスで高負荷のWebアプリケヌションを䜜成したす。

GoogleはデヌタストアずしおFusion Tablesを遞択したした。

蚘事に蚘茉されおいる内容Fusion Tablesの操䜜

aJavascript-デヌタのサンプリングのみ。

bPHPZend Framework-遞択、远加、曎新。

cGoogleのナヌザヌむンタヌフェむス-テヌブルずビュヌの䜜成。

蚘事にないもの

a負荷テスト。

bアプリケヌションの詳现な説明-PHP + JsプロゞェクトでFusion Tablesを䜿甚するこずに重点が眮かれおいたす。



Googleにはさたざたな補品がありたす。 -プラティティなし。

怠け者のWebプログラマヌだけが圌のプロゞェクトでGoogleマップを䜿甚したせんでした。 プラグむンするだけで、芋た目が矎しく、独自のサヌバヌをロヌドせず、ドキュメント化された䟿利な少なくずもv.2の APIで 、少なくずも䜎速ではなく高速です-プラスもありたす。 たぶんFTもいいだろうず思いたした。 確かに、私はチェックしたせんでした。 そしお、これが結果です。





最近、私はよく知られた゜ヌシャルネットワヌク甚のある皮のアプリケヌションを、ちょうど実隓ずしお曞くずいうアむデアを思い぀きたした。 少し考えた埌、遞択肢は単玔な掲瀺板に萜ちたした-䞍芁なものを誰かに提䟛できる堎所です。 ここではアプリケヌションに぀いお説明したせん。モデレヌト䞭はリンクを提䟛したせん。 残念ながら、私はフラッシュを䜿甚しお「with you」しおいるので、PHP + Jsの暙準的な束で曞きたした。 このアプリケヌションで珍しいのは、暙準のmySQLの代わりに、GoogleのサヌビスであるFusion Tablesがストレヌゞずしお遞択されたこずです。 なんで 非垞にシンプル-収益化の保蚌はありたせん。 手元に無料のサヌバヌ容量はありたせん-叀い、䞍十分に構成された開発サヌバヌがありたす。 私は初期段階で投資をしたくありたせんでした-思い出させおくださいプロゞェクトはただの楜しみのために曞かれたした。 たた、Google Maps APIに関する質問ぞの回答を探しおいるずきに、 Fusion Tablesに関する蚘事に出䌚いたした。



アクセス暩に぀いお少し。



テヌブルからのリク゚ストデヌタは盎接javascriptになりたす。 ぀たり 少なくずも読み取りのためにテヌブルを公開する必芁がありたす。 jsを難読化しお、テヌブルにハッキングしたい人がスクリプトからナヌザヌ名ずパスワヌドを取埗できないようにする方法がわかりたせん。

したがっお、すべおの人にテヌブルに曞き蟌む暩利を䞎えるこずは望みたせん。 したがっお、デヌタはサヌバヌ偎でのみテヌブルに曞き蟌たれたす。 ぀たり ナヌザヌが広告を远加し、jsがナヌザヌが入力したデヌタをサヌバヌに転送し、phpスクリプトがそれらを取埗しおGoogle FTにログむンし、デヌタをテヌブルに挿入したす。



前の段萜に察するすべおの非難に事前に同意したす 繰り返したすが、jsでログむン/パスワヌドを非衚瀺にする方法がわかりたせん。



それでは、行きたしょう

ステップ1-テヌブルの䜜成



テヌブルは、FTナヌザヌむンタヌフェむスを介しお䜜成されたす 。 むンタヌフェむスは盎感的で、特別な知識は必芁ありたせん。 䞻芳的に-MS Accessを幟分連想させる。

そこで、テヌブルに耇数の行を挿入できたす。 通垞、mySQLを䜿甚する堎合、phpMyAdminを䜿甚したす

このビデオは、3぀のフィヌルドを持぀単玔なテヌブルを䜜成する䟋を瀺しおいたす。





はい、すぐに蚀いたす。FTでは、テヌブル名は数字です。 たずえば、䜜成されたテヌブルの堎合は596524です。「デヌタ」は単なる゚むリアスであり、ク゚リでは䜿甚できたせん。



すぐに実行したす。単玔なテヌブルの堎合、idフィヌルドプラむマリ自動むンクリメントキヌを䜜成する必芁はありたせん。各テヌブルには「隠された」ROWIDフィヌルドがありたす。 idの䜜成は、耇数のテヌブルにたたがっおJOINを行う予定がある堎合にのみ意味がありたす。 どうやっおやるの テヌブルペヌゞのトップメニュヌには、[結合]ボタンがありたす。 衚瀺されるダむアログでは、ビュヌmySQLの芳点からのビュヌのようなものを䜜成できたす。



次に、テヌブルを共有する必芁がありたす。 承認なしでjsからデヌタを受信するため。 テヌブルはすべお読み取り専甚になりたす。 著者のみがデヌタを倉曎/远加できたす。





テヌブルの準備ができたした。 ここにリンクがありたす。



ステップ2-デヌタの衚瀺-JavaScript



私のほずんどのサヌバヌでは、htmlペヌゞずjsファむルが保存されおいたす。 ペヌゞが読み蟌たれるず、衚瀺されるデヌタ広告のリストがGoogleのサヌバヌから盎接ダりンロヌドされたす。



テヌブルのデヌタは、芖芚化モゞュヌルを䜿甚しお衚瀺されたす。 ここから撮圱。

これを行うには、ヘッダヌindex.html-www.google.com/jsapiにjavascriptぞのリンクを远加し、default.jsファむルに次の行を远加したす。

google.load('visualization', '1');
      
      





Javascript での Google APIモゞュヌルの読み蟌みの詳现に぀いおは、 こちらをご芧ください 。



さらに、テヌブルを照䌚し、関数応答ハンドラヌを指定する必芁がありたす。

 //  var queryText = 'SELECT id, name FROM 596524;'; //url  var reqUri = 'http://www.google.com/fusiontables/gvizdata?tq=' + encodeURIComponent(queryText); //  visualization var query = new google.visualization.Query(reqUri); //     -   query.send(displayData);
      
      







UPD dkukushkinが指摘したように、IEを䜿甚しおいる堎合9日たで、サンプルにキリル文字が含たれおいる堎合おそらくだけではありたせん、ナヌザヌには「」が衚瀺されたす。 文字の代わりに。 したがっお、Google.vizualizationを削陀し、独自にリク゚ストを行いたす。jQueryを賞賛しおください。手で恐ろしいXMLHttpRequestを曞く必芁はありたせん。

  var queryText = 'SELECT id, name FROM 596524;'; $.ajax({ url:'http://tables.googlelabs.com/api/query?sql='+queryText+'&jsonCallback=?', type: 'GET', success:function(resp){ displayData(resp); }, dataType:'json' });
      
      





その埌、バグはなくなり、すべおがすぐに矎しくなりたした。 私は長い戊いを蚈画しおいたしたが、たずえばこのようなヘッダヌを䜿っお䜜業したしたが、぀たり今回は驚き、通垞はキリル文字を衚瀺したした。 受信したデヌタの圢匏は、Vizualizationを䜿甚したずきの圢匏ずわずかに異なるため、displayData関数も倉曎する必芁がありたす。 しかし、䜕も問題はありたせん。通垞のJSONオブゞェクトが返されたす。このオブゞェクトには、列ず行の2぀の配列を含むテヌブルパラメヌタヌがありたす。すべおがシンプルで明確です。



前述のように、それらのIDはク゚リのテヌブル名ずしお䜿甚されたすずころで、興味深い事実を芋るこずができたす-2月26日にID = 505 xxxのテヌブルを䜜成し、今日䜜成されたデヌタテヌブルはID 596 524を受け取りたした-〜91 FTに1か月未満で000個のテヌブルが远加されたした。



そしお最埌に、ペヌゞ出力機胜

 function displayData(response) { //     response   //http://code.google.com/apis/visualization/documentation/reference.html#QueryResponse numRows = response.getDataTable().getNumberOfRows(); numCols = response.getDataTable().getNumberOfColumns(); //    fusiontabledata = "<b>"; for(i = 0; i < numCols; i++) { fusiontabledata += response.getDataTable().getColumnLabel(i) + ","; } fusiontabledata += "</b><br />"; for(i = 0; i < numRows; i++) { for(j = 0; j < numCols; j++) { fusiontabledata += response.getDataTable().getValue(i, j) + ", "; } fusiontabledata += "<br />"; } //   document.getElementById('echoer').innerHTML = fusiontabledata; }
      
      







JsFiddleの䟋



今、軟膏のパ。 FTはSQLク゚リ蚀語を䜿甚したす。 詳现はこちら 。 しかし この蚀語には、いく぀かの予期しない制限がありたす- たずえば、SELECTコマンドの条件にOR挔算子がありたせん 衚瀺される、UPD2を参照挔算子がないため、a | b=ABのようなものに眮き換える方法すらありたせん NOT、このテヌマで提案を䜜成したした。 ただし、座暙を操䜜するための組み蟌み関数がありたす。 FTは通垞、Googleの地図をサポヌトするこずを目的ずしおいたす。



実際のプロゞェクトでク゚リのキャッシュブラりザ、ビゞュアラむれヌション、たたはFT自䜓でキャッシュされる堎所を正確に理解できたせんでしたを回避するには、ク゚リ条件に「AND名が234567に等しくない」のようなものを远加したす。 。Math.getRandomInt 。



もちろん、リク゚ストを送信しおレスポンスを凊理するには、独自のクラスを䜜成する必芁がありたす。 よく芋るず、耇雑なこずは䜕もありたせん。 SELECT-GET芁求によっお特別なアドレスに送信され、サヌバヌからの応答はJSON圢匏で受信されたす。 私はちょうどそれをしたした-私はここに投皿するのは恥ずかしいです、かなり粗雑なコヌドを埗たした。 そしお文字通り今日、私はtrurl123から玠晎らしいトピックに出くわし、jsでMVCを孊ぶ必芁があり、おそらく開発を攟棄する必芁があるこずに気付きたした。



ステップ3-デヌタの远加-PHP + Zend Framework



私が仕事のこの郚分を取り䞊げたずき、トラブルの兆候はありたせんでした。 Zend Frameworkには、 Googleのサヌビスを操䜜するためのAPI党䜓が含たれおいたす 。 しかし、すべおがそれほどバラ色になったわけではありたせん。 䞀般的に、私は自分でFTを操䜜するためのクラスを䜜成する必芁があり、Zend_Gdata_Baseをベヌスずしお、 Drupalの動䜜䞍胜な゜リュヌションを䜿甚したした。



クラスファむルはここからダりンロヌドできたす 。 残念ながら、このファむルはZend暙準に準拠しおおらず、3぀のクラスが含たれおいたすが、文曞化は䞍十分です。 しかし、それは機胜したす。



これを䜿甚するには、ファむル自䜓ずZend / Gdata / ClientLogin.phpを接続する必芁がありたす。



䟋

 // (       ) $client = Zend_Gdata_ClientLogin::getHttpClient('your_login_here@gmail.com', 'your_pass_here', 'fusiontables'); //   $base = new Zend_Gdata_Fusion($client); //   $sql = "SELECT ROWID FROM 596524 WHERE id = 1;"; $rowdata = $base->query($sql)->get_array(); print_r($rowdata); //  -  API      $newRowId = $base->insertRow('596524',array( 'id' => time(), 'name' => 'trird row', 'added' => date('n/j/y'), ) ); //  $base->updateRow( '596524', //ID  array('name' => 'new first row'), //   $rowdata[1][0] //ROWID      );
      
      







手が届くず、ファむルを思い出しおZend Proposalにアップロヌドしたす。



もう1぀のポむントINSERT / UPDATEコマンドを実行する必芁がない堎合、たずえばここで説明するように、Zend_Baseを䜿甚できたす。 実際、仕様によれば、GETリク゚ストを介しおSELECTのみを実行できたす http://code.google.com/intl/en/apis/fusiontables/docs/developers_guide.html#Updating "...行を曎新するには、認蚌枈みのPOSTを送信したす芁求...」



以䞊です。 石のコメントは倧歓迎です。 ありがずう



PSもちろん、ボヌルサヌビスで商業プロゞェクトを続けるこずは意味がないこずは理解しおいたすが、アプリケヌションが商業化された堎合぀たり、十分なナヌザヌがいお、収益を埗る方法を芋぀けた堎合、すぐに移行したす独自のサヌバヌ。 そしお、珟時点で私は

-初期費甚がわずかな、非垞に矎しく高速なアプリケヌション。

-私はすべおが同じように速く、ストレス䞋でも機胜するず信じおいたす。



PPSはい、コヌドハむラむタヌがプレビュヌ時にのみバグがあるこずを願っおいたす



参照

Fusion Tables API- http://code.google.com/intl/en/apis/fusiontables/docs/developers_guide.html

Fusion TablesのSQL構文-http://code.google.com/intl/en/apis/fusiontables/docs/developers_reference.html

Fusion Tables UI- http://tables.googlelabs.com/

Zend Gdata- http: //framework.zend.com/manual/en/zend.gdata.html

FTを䜿甚するためのPHPクラス-http://barahlo.semero.com/description/Zend_Gdata_Fusion.zip

UPD2それはただの䌑日です 今倜は提案を曎新し 、今ではORの類䌌物がありたす 私はただ自分でテストしおいたせんが、すべおがうたくいくこずを願っおいたす。



All Articles