2009-06-04 11 views
6

クライアントは、PHPで構築されたカスタムソリューションを使用して自分のウェブサイトのホームページにTwitterストリームを追加することを希望します。PHP経由でTwitter APIを使用する最も良い方法は何ですか?

Twitter APIには、1時間にできるコール数が限られているので、誰かが自分のホームページをリフレッシュするたびにTwitterに自動的にpingすることはできません。

お客様のウェブサイトは現時点では純粋にHTMLですので、データベースはありませんがあります。したがって、私のソリューションは、PHPとローカルファイルシステム(例えば、いくつかのデータを含むローカルXMLファイルを保存する)だけを必要とする必要があります。

この限定された条件で、数分以内にAPI呼び出しの制限を守らずにTwitter APIにアクセスするにはどうすればよいですか?

+0

私にはこれを書くよう人々に求めていません! :) 私はPHPを行って以来ずっと長い時間がかかりました。だから私は、この非常に特定の問題に取り組むためのベストプラクティスをスピードアップしようとしています。 事前の洞察や提案に感謝します。 – markedup

+0

"ローカルファイルシステム" - これはサーバー自体です。 "Sever setup" - FTP経由でアクセスできるもの以外のものには触れません(cPanelやcronなどはありません)。 – markedup

+0

申し訳ありません。「サーバー設定」は「サーバー設定」にする必要があります。 – markedup

答えて

3

に役立ちます。

check age of cache 
Is it more than 5 mins old? 
    fetch the latest information 
    regenerate the HTML for output 
    save the finished HTML to disk 
display the cached pre-prepared HTML 

PEAR's Cache_Liteキャッシングレイヤーに必要なすべてを行います。

0
  1. cronジョブ(likleyない - でも、データベースが存在しない場合は、その後、何のcronジョブが存在しないが)
  2. ファイルにmicrotime()を書き込みます。現在のタイムスタンプと保存されたタイムスタンプを比較します。その差がN分より大きい場合は、新しいtweetfeedを引っ張ってファイルに現在のタイムスタンプを書き込んでください
  3. フロントページがPHPを呼び出さない静的なhtmlファイルである場合は、画像1を含む<img src="scheduler.php"/>を含む透明なgif少なくとも、あなたは私が若かったときには、この方法をやった)と「サーバではない私/顧客コンピュータ」-localにように、あなたの静か

をさえずりが、引っ張ったり、ローカル -localファイルシステムを意味するのでしょうか?この場合

  1. cronジョブまたはスケジューラで、いくつかのサーバーを取得し、PHP
  2. ファイルへのフィードを読み込み、保存したスクリプトを記述し、顧客のサーバーにファイルを書き込みますFTPを使用して
  3. javascriptを使用してフィードを表示します(はい、ajaxはデータソースとして静的ファイルでも機能します)。 jqueryのか、いくつかのlibこの
  4. またはのための素晴らしいです:ローカルつぶやき-表示するHTMLファイルを作成し、それをアップロードします(ただし、サーバー上の最新情報を上書きする可能性があるので...注意してください)

IMO:小型のためとにかく完全に成長したSQLデータベースは必要ありません。ファイルシステムは素晴らしいです。 scandir,preg_matchの組み合わせと慎重に選択されたファイル名で十分です。
実際には、美しいjavascriptを使用して、多くのフロントエンド処理(XML表示など)を行うことができます。

0

私はあなたのサーバの設定を知らないので、あなたはcronジョブをセットアップすることをお勧めします(あなたはLinuxボックスでの作業を想定しています)。あなたが共有ホスティング環境にcPanelのようなものを持っているのであれば、それほど大きな問題ではありません。あなたは、cronによって呼び出され、最新のつぶやきを取得し、それらをファイル(xml?)に書き込むスクリプトを書く必要があります。 cronが30分ごとに実行されるようにスケジュールすることができます。またはあなたが今までに望むもの。

0

あなたは、Tim DaviesのTweetPHPを使用することができます。 http://lab.lostpixel.net/classes/twitter/ - このクラスには、あなたのクライアントのタイムラインを示す、あなたが望むものを含む多くの機能があります。 このページは、その使用方法に関する良い例を示しています。

これをファイルまたはデータベースに出力することができます。サイト訪問者が5分ごとにデータベースやファイルを更新するようにするには、タイムスタンプを保持するセッション変数を設定し、少なくとも5分前にタイムスタンプがあった場合は別の更新を許可します。

希望これはあなたのタイムラインをプルダウンし、それにいくつかのファイルベースのキャッシングを追加するために、それを表示することができたら、それは、非常に簡単になります

0

私の提案:キャッシュの日付とつぶやきの配列を保持する小さな単純なオブジェクトを作成します。誰かがページにアクセスするたびに、次のロジックを実行します。

A)ファイルは存在しますか?

はい:変数 なしにそれを読むDに進み)

B)アンシリアライズ変数(PHP対シリアライズ()/アンシリアライズ()がうまく行うだろう)

C)現在の時刻(Unixのタイムスタンプで保存されている)に保存されているキャッシュの経過時間を比較する 5分以上おきに

D)Twitterから最新のつぶやきを取得し、オブジェクトを更新してシリアル化して書き込みます再度キャッシュ最新のつぶやきを印刷用に保存してください。 それはない:ちょうどキャッシュからつぶやきを読んでください。

E)ツイート

単純でオブジェクトをシリアル化する最も簡単な方法を印刷するシリアル化()/アンシリアライズ()のペアです。あなたがオブジェクトを作る努力を延期したくなければ、2D配列を使うことができ、serialize()はうまくいくでしょう。 http://php.net/serialize

あなたはcPanelアクセス権がないと考えると、PEARパッケージ、cronまたはその他の簡単なソリューションにアクセスすることができないため、最良のソリューションです。

あなたのコードで今
0
array(
'lastrequest' => 123, 
'tweets' => array() 
) 

はlastrequestのデータストア内のタイムスタンプは、X秒よりも古いかどうかを確認するためにチェックを入れて。そうであれば、データを更新する時間です。

配列をファイルにシリアライズして保存すると、かなりシンプルになります。

関連する問題