Formspringを使用した最も簡単なQ&Aサービス

この記事では、 Formspring匿名質問サービスを使用して、PHPのサードパーティリソースに関する質問/回答セクションを整理する方法を示します。

Formpring APIは自然に存在します(RESTに似ています)が、現在は「ベータ」段階にあり、私が理解しているように、エリートのみがそれを完全に使用できます。 開発者向けのページには、「現在、APIは特定のユーザーとパートナーのグループに限定されています」と書いています。 仕事に必要なキーをすぐに吐き出さない登録が必要です。 しばらく前にすでにアプリケーションを送信しましたが、応答がありませんでした。 ただし、一部のAPIメソッドは認証なしで使用できます(情報の禁止受信)。

次に、発生した問題を個人的にどのように回避したかを示します。 タイトルで述べたように、これは次のことができる最も単純なサービスです。

このサービスを使用するには、当然Formspringのアカウントが必要です。 アカウントからの応答を表示するシンプルで明白なことから始めましょう。

リスト応答


いくつかの方法があります:アカウントのRSSフィードを解析するか、APIを使用します。 どのオプションを選択すると思いますか? そうですね
これには/ answer / listメソッドがあり、ページの最後の20エントリが表示されます。 さらに、リクエストには追加のパラメーターがあります。

同時に、max_idとsince_idを同時に使用することはできません。

このサービスでは、20エントリの標準出力に制限しています。 ここでは問題はないので、 file_get_contents()関数を使用します。 URLでリクエストを行います:

beta-api.formspring.me/answered/list _

このようなリクエストは、JSON形式のレスポンスのリストを返します。
その結果、次のコードのようなものが得られます。

 $data = json_decode(file_get_contents('http://beta-api.formspring.me/answered/list/_')); foreach ($data->response as $item) { echo ' <strong>'.$item->question.'</strong> ('.date('d.m', strtotime($item->time)).' <a href="http://www.formspring.me/_/q/'.$item->id.'" target="_blank">#</a>) <br /> '.$item->answer.' <hr /> '; } 

注:エントリには、asked_byフィールドも含まれています。匿名で質問された場合、このフィールドは空になりません。

匿名の質問を送信する


これが主なシャーマニズムの始まりです。 まず、トークンを取得します。これにより、計画を正常に実行できます。 このためには、ログアウト(ログアウト)するのが最善です。 匿名になってあなたのページにアクセスしてください:

www.formspring.me _

ページのソースコードを確認します(通常はCtrl + Uキーが使用されます)。 そこで、「トークン」または「id =」ask””のいずれかを探しています。その中で、非表示のトークンフィールドを探しています。
次に、ブラウザのUser-Agentを見つける必要があります。 私の観察によると、トークンはUser-Agent値を使用して生成されるため、トークンを検索したブラウザーのこれらの値を見つける必要があります。 これはさまざまな方法で行えます。 たとえば、FirefoxまたはGoogle Chromeの場合、JavaScriptコンソールを開いて次のように入力できます。

navigator.userAgent

たとえば、私のブラウザの場合、これは次の行です。
Mozilla / 5.0(Windows NT 6.1; WOW64; rv:12.0)Gecko / 20100101 Firefox / 12.0

次に、コーディングに直接渡します。 質問テキストを入力するフィールドを持つフォームを作成します。 フォーム送信ハンドラーは次のようになります。

 $ch = curl_init('http://www.formspring.me/profile/ask/_'); $data = array( 'token' => _, 'question' => __, 'ajax' => 1 ); curl_setopt($ch, CURLOPT_URL, 'http://www.formspring.me/profile/ask/_'); curl_setopt($ch, CURLOPT_REFERER, 'http://www.formspring.me/_'); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); curl_setopt($ch, CURLOPT_USERAGENT, _USER-AGENT); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); if (curl_exec($ch) !== FALSE) { echo '   !'; } else { echo curl_error($ch); } curl_close($ch); 

cURLライブラリーを使用して、ブラウザーの動作をシミュレートし、Formspringサーバーにフォームを送信します。

すべてが正しく行われていれば、Formspringのプロフィールページから質問に回答できます(他の質問/回答管理も同様)。 私はすべてを詳細に説明したわけではなく、エラー処理を考慮せず、主なアイデアを伝えることにのみ集中しました。

スクリプトの例も含まれています。

更新:
人気のある需要により、ソースコードと使用例を githubにアップロードしました 。 別のクラスですべてを設計しました。 コードにはおそらくインドがたくさんあるので、バグ、不正確、苦情を報告してください!

更新2:
また、人々はページ自体のソースを求めました。 それを取得します。

Source: https://habr.com/ru/post/J144868/


All Articles