OAuthは、保護されたデータを公開および対話するためのシンプルで安全で安全な方法を提供する認証プロトコルです。これにより、ユーザーはパスワードを共有せずに自分に代わって行動するアプリケーションを承認できます。
ユーザーに代わって保護されたデータを保存している場合、アクセスするためにパスワードをウェブ上に広めてはいけません。代わりに、OAUTHを使用して、アカウントの資格情報を保護しながら、ユーザーがデータにアクセスできるようにすることができます。 PHPクラスのコーディング
Twitterアプリケーションの作成とAPIキーの取得に関するステップバイステップガイドは、hostoople.com
にあります。PHPクラスを作成し、さまざまなパラメーターを保存するプロパティを含めます。これらの概要を以下に示します
<span>class Twitter_API_WordPress { </span> <span>/** <span>@var <span>string</span> OAuth access token */</span> </span> <span>private $oauth_access_token; </span> <span>/** <span>@var <span>string</span> OAuth access token secrete */</span> </span> <span>private $oauth_access_token_secret; </span> <span>/** <span>@var <span>string</span> Consumer key */</span> </span> <span>private $consumer_key; </span> <span>/** <span>@var <span>string</span> consumer secret */</span> </span> <span>private $consumer_secret; </span> <span>/** <span>@var <span>array</span> POST parameters */</span> </span> <span>private $post_fields; </span> <span>/** <span>@var <span>string</span> GET parameters */</span> </span> <span>private $get_field; </span> <span>/** <span>@var <span>array</span> OAuth credentials */</span> </span> <span>private $oauth_details; </span> <span>/** <span>@var <span>string</span> Twitter's request URL */</span> </span> <span>private $request_url; </span> <span>/** <span>@var <span>string</span> Request method or HTTP verb */</span> </span> <span>private $request_method;</span>
コンストラクターは、Twitterのアプリケーションコンシューマー(またはAPI)キーと秘密の配列を受け入れ、トークンとアクセストークンシークレットにアクセスし、それぞれのプロパティに保存します。
<span>/** Class constructor */ </span> <span>public function __construct( $settings ) { </span> <span>if ( ! isset( $settings['oauth_access_token'] ) </span> <span>|| ! isset( $settings['oauth_access_token_secret'] ) </span> <span>|| ! isset( $settings['consumer_key'] ) </span> <span>|| ! isset( $settings['consumer_secret'] ) </span> <span>) { </span> <span>return new WP_Error( 'twitter_param_incomplete', 'Make sure you are passing in the correct parameters' ); </span> <span>} </span> <span>$this->oauth_access_token = $settings['oauth_access_token']; </span> <span>$this->oauth_access_token_secret = $settings['oauth_access_token_secret']; </span> <span>$this->consumer_key = $settings['consumer_key']; </span> <span>$this->consumer_secret = $settings['consumer_secret']; </span> <span>}</span>
プライベートメソッド_build_signature_base_string()は、次の引数を受け入れて署名ベース文字列を作成します:リクエストURL、リクエスト方法またはHTTP動詞、およびOAuth資格情報(消費者キーとシークレット;アクセストークンと秘密;それはget requestです)。
<span>/** </span><span> * Store the POST parameters </span><span> * </span><span> * <span>@param <span>array</span> $array array of POST parameters </span></span><span> * </span><span> * <span>@return $this </span></span><span> */ </span> <span>public function set_post_fields( array $array ) { </span> <span>$this->post_fields = $array; </span> <span>return $this; </span> <span>} </span> <span>/** </span><span> * Store the GET parameters </span><span> * </span><span> * <span>@param $string </span></span><span> * </span><span> * <span>@return $this </span></span><span> */ </span> <span>public function set_get_field( $string ) { </span> <span>$this->getfield = $string; </span> <span>return $this; </span> <span>}</span>
_generate_oauth_signature()private methodは、作成された署名ベース文字列を受け入れて、oauth署名を生成します。
oauth_consumer_key - Twitterアプリケーション消費者キー
oauth_nonce - クライアントがユニークに生成するランダムな文字列は、time()またはmt_rand()。<span>private function _generate_oauth_signature( $data ) { </span> <span>// encode consumer and token secret keys and subsequently combine them using & to a query component </span> <span>$hash_hmac_key = rawurlencode( $this->consumer_secret ) . '&' . rawurlencode( $this->oauth_access_token_secret ); </span> <span>$oauth_signature = base64_encode( hash_hmac( 'sha1', $data, $hash_hmac_key, true ) ); </span> <span>return $oauth_signature; </span><span>}</span>
“ hmac-sha1”
そして最後に、クラスを閉じます。
<span>/** </span><span> * Build, generate and include the OAuth signature to the OAuth credentials </span><span> * </span><span> * <span>@param <span>string</span> $request_url Twitter endpoint to send the request to </span></span><span> * <span>@param <span>string</span> $request_method Request HTTP verb eg GET or POST </span></span><span> * </span><span> * <span>@return $this </span></span><span> */ </span> <span>public function build_oauth( $request_url, $request_method ) { </span> <span>if ( ! in_array( strtolower( $request_method ), array( 'post', 'get' ) ) ) { </span> <span>return new WP_Error( 'invalid_request', 'Request method must be either POST or GET' ); </span> <span>} </span> <span>$oauth_credentials = array( </span> <span>'oauth_consumer_key' => $this->consumer_key, </span> <span>'oauth_nonce' => time(), </span> <span>'oauth_signature_method' => 'HMAC-SHA1', </span> <span>'oauth_token' => $this->oauth_access_token, </span> <span>'oauth_timestamp' => time(), </span> <span>'oauth_version' => '1.0' </span> <span>); </span> <span>if ( ! is_null( $this->get_field ) ) { </span> <span>// remove question mark(?) from the query string </span> <span>$get_fields = str_replace( '?', '', explode( '&', $this->get_field ) ); </span> <span>foreach ( $get_fields as $field ) { </span> <span>// split and add the GET key-value pair to the post array. </span> <span>// GET query are always added to the signature base string </span> <span>$split = explode( '=', $field ); </span> <span>$oauth_credentials[ $split[0] ] = $split[1]; </span> <span>} </span> <span>} </span> <span>// convert the oauth credentials (including the GET QUERY if it is used) array to query string. </span> <span>$signature = $this->_build_signature_base_string( $request_url, $request_method, $oauth_credentials ); </span> <span>$oauth_credentials['oauth_signature'] = $this->_generate_oauth_signature( $signature ); </span> <span>// save the request url for use by WordPress HTTP API </span> <span>$this->request_url = $request_url; </span> <span>// save the OAuth Details </span> <span>$this->oauth_details = $oauth_credentials; </span> <span>$this->request_method = $request_method; </span> <span>return $this; </span> <span>}</span>
注意:set_post_fields()、set_get_field()、build_oauth()で、オブジェクト$は、メソッドチェーンをサポートするために各方法で返されます。
例:<span>/** </span><span> * Generate the authorization HTTP header </span><span> * <span>@return <span>string</span> </span></span><span> */ </span> <span>public function authorization_header() { </span> <span>$header = 'OAuth '; </span> <span>$oauth_params = array(); </span> <span>foreach ( $this->oauth_details as $key => $value ) { </span> <span>$oauth_params[] = "<span><span>$key</span>=\""</span> . rawurlencode( $value ) . '"'; </span> <span>} </span> <span>$header .= implode( ', ', $oauth_params ); </span> <span>return $header; </span> <span>}</span>
よりよく理解するために、以下のクラスの使用法を参照してください。
<span>/** </span><span> * Process and return the JSON result. </span><span> * </span><span> * <span>@return <span>string</span> </span></span><span> */ </span> <span>public function process_request() { </span> <span>$header = $this->authorization_header(); </span> <span>$args = array( </span> <span>'headers' => array( 'Authorization' => $header ), </span> <span>'timeout' => 45, </span> <span>'sslverify' => false </span> <span>); </span> <span>if ( ! is_null( $this->post_fields ) ) { </span> <span>$args['body'] = $this->post_fields; </span> <span>$response = wp_remote_post( $this->request_url, $args ); </span> <span>return wp_remote_retrieve_body( $response ); </span> <span>} </span> <span>else { </span> <span>// add the GET parameter to the Twitter request url or endpoint </span> <span>$url = $this->request_url . $this->get_field; </span> <span>$response = wp_remote_get( $url, $args ); </span> <span>return wp_remote_retrieve_body( $response ); </span> <span>} </span> <span>}</span>
このクラスは、WordPressプラグインのコンテキスト内で使用する必要があります。ワードプレスHTTP APIが機能するために必要なため、スタンドアロンクラスとしては機能しません。
最新のツイートのリストまたはコレクションを取得するには、以下のガイドに従ってください。 注:https://api.twitter.com/1.1/statuses/user_timeline.jsonは、最近のツイートデータを取得するためのリソースURLです。
最初に、アクセスキーとトークンの配列を作成します。<span>class Twitter_API_WordPress { </span> <span>/** <span>@var <span>string</span> OAuth access token */</span> </span> <span>private $oauth_access_token; </span> <span>/** <span>@var <span>string</span> OAuth access token secrete */</span> </span> <span>private $oauth_access_token_secret; </span> <span>/** <span>@var <span>string</span> Consumer key */</span> </span> <span>private $consumer_key; </span> <span>/** <span>@var <span>string</span> consumer secret */</span> </span> <span>private $consumer_secret; </span> <span>/** <span>@var <span>array</span> POST parameters */</span> </span> <span>private $post_fields; </span> <span>/** <span>@var <span>string</span> GET parameters */</span> </span> <span>private $get_field; </span> <span>/** <span>@var <span>array</span> OAuth credentials */</span> </span> <span>private $oauth_details; </span> <span>/** <span>@var <span>string</span> Twitter's request URL */</span> </span> <span>private $request_url; </span> <span>/** <span>@var <span>string</span> Request method or HTTP verb */</span> </span> <span>private $request_method;</span>
w3guyがあなたのTwitterユーザー名であるリクエストURLとメソッドを設定します。
<span>/** Class constructor */ </span> <span>public function __construct( $settings ) { </span> <span>if ( ! isset( $settings['oauth_access_token'] ) </span> <span>|| ! isset( $settings['oauth_access_token_secret'] ) </span> <span>|| ! isset( $settings['consumer_key'] ) </span> <span>|| ! isset( $settings['consumer_secret'] ) </span> <span>) { </span> <span>return new WP_Error( 'twitter_param_incomplete', 'Make sure you are passing in the correct parameters' ); </span> <span>} </span> <span>$this->oauth_access_token = $settings['oauth_access_token']; </span> <span>$this->oauth_access_token_secret = $settings['oauth_access_token_secret']; </span> <span>$this->consumer_key = $settings['consumer_key']; </span> <span>$this->consumer_secret = $settings['consumer_secret']; </span> <span>}</span>
<span>/** </span><span> * Store the POST parameters </span><span> * </span><span> * <span>@param <span>array</span> $array array of POST parameters </span></span><span> * </span><span> * <span>@return $this </span></span><span> */ </span> <span>public function set_post_fields( array $array ) { </span> <span>$this->post_fields = $array; </span> <span>return $this; </span> <span>} </span> <span>/** </span><span> * Store the GET parameters </span><span> * </span><span> * <span>@param $string </span></span><span> * </span><span> * <span>@return $this </span></span><span> */ </span> <span>public function set_get_field( $string ) { </span> <span>$this->getfield = $string; </span> <span>return $this; </span> <span>}</span>
クレジットとリソース
このクラスの構造とコードは、ジェームズ・マリソンのPHP Twitterクライアントに触発されました。
<span>/** </span><span> * Create a signature base string from list of arguments </span><span> * </span><span> * <span>@param <span>string</span> $request_url request url or endpoint </span></span><span> * <span>@param <span>string</span> $method HTTP verb </span></span><span> * <span>@param <span>array</span> $oauth_params Twitter's OAuth parameters </span></span><span> * </span><span> * <span>@return <span>string</span> </span></span><span> */ </span> <span>private function _build_signature_base_string( $request_url, $method, $oauth_params ) { </span> <span>// save the parameters as key value pair bounded together with '&' </span> <span>$string_params = array(); </span> <span>ksort( $oauth_params ); </span> <span>foreach ( $oauth_params as $key => $value ) { </span> <span>// convert oauth parameters to key-value pair </span> <span>$string_params[] = "<span><span>$key</span>=<span>$value</span>"</span>; </span> <span>} </span> <span>return "<span><span>$method</span>&"</span> . rawurlencode( $request_url ) . '&' . rawurlencode( implode( '&', $string_params ) ); </span> <span>}</span>
に陥りました
Twitter OAuthがシナリオコンテキストでどのように機能するかTwitterのドキュメント
に関するよくある質問
WordPressサイトでOAUTH2をセットアップするにはどうすればよいですか?WordPressサイトでOAUTH2のセットアップには、OAUTH2プラグインのインストールと構成が含まれます。 WordPressプラグインディレクトリで利用可能ないくつかのプラグインから選択できます。プラグインをインストールしたら、クライアントIDやクライアントSecretなど、OAUTH2プロバイダーの詳細でそれを構成する必要があります。また、プロバイダーの要件に応じて、リダイレクトURLとスコープをセットアップする必要があります。安全な委任されたアクセス。これにより、ユーザーはパスワードを共有せずにTwitterアカウントへのサードパーティのアプリケーションアクセスを許可できます。これは、アプリケーションがお客様に代わってTwitterと対話し、ツイート、タイムラインの読み取り、新しいユーザーのフォローなどのアクションを実行できることを意味します。 TwitterのAPIの問題は、アプリケーションが正しく構成され、正しいAPIキーを使用していることを確認することで修正できます。また、アプリケーションがTwitterのレート制限を超えていないことを確認する必要があります。まだ問題が発生している場合は、さらなる支援のためにTwitterの開発者サポートに連絡する価値があるかもしれません。以上がOauth、Twitter、WordPress HTTP APIおよびあなたの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。