ホームページ > CMS チュートリアル > &#&プレス > Oauth、Twitter、WordPress HTTP APIおよびあなた

Oauth、Twitter、WordPress HTTP APIおよびあなた

Lisa Kudrow
リリース: 2025-02-18 08:30:12
オリジナル
375 人が閲覧しました

OAuth, Twitter, the WordPress HTTP API and You

Oauth、Twitter、WordPress HTTP APIおよびあなた

キーテイクアウト

  • OAuthは、保護されたデータと対話するためのより安全な方法を提供する認証プロトコルであり、パスワードを共有せずにユーザーに代わってアプリケーションを行うことができます。 Twitterは、HTTPリクエストをAPIに承認するためにOAuthを使用しています。
  • チュートリアルでは、Twitterを消費するためのWordPress HTTP APIを搭載したPHPクラスを作成する方法に関するステップバイステップガイドを提供します。これには、Twitterのキーおよびアクセストークンのアプリケーション管理センターにアプリケーションの作成、PHPクラスのコーディング、OAuth認証を使用してTwitterにHTTPリクエストを作成することが含まれます。
  • チュートリアルで作成されたPHPクラスは、WordPressプラグインのコンテキスト内で使用してTwitterデータにアクセスできます。提供されている例には、最近のツイートの取得とプロファイルの説明の更新が含まれます。
  • チュートリアルは、OAuthを正しく構成し、展開エラーを避けるために正しいAPIキーを使用することの重要性を強調しています。また、不正アクセスを防ぐためにOAuthトークンを保護する必要性を強調しています。
  • 以前のチュートリアルでは、WordPress HTTP APIに深く飛び込みました。次のプラグインを構築して、その使用法の実世界の例を示すために、ドメインWHOISとソーシャルデータウィジェットを示しました。 WordPressログイン、登録、コメント用のCaptcha Protection Plugin;使い捨てのメールアドレスのサインアップを停止するためのプラグイン。
  • このチュートリアルでは、OAuthの世界に紹介されます。TwitterがHTTPリクエストをAPIに承認するためにそれを使用し、最後にTwitterを消費するときにプラグインが利用できるWordPress HTTP APIを搭載したPHPクラスを構築する方法を紹介します。 。
oauthの紹介

OAuthは、保護されたデータを公開および対話するためのシンプルで安全で安全な方法を提供する認証プロトコルです。これにより、ユーザーはパスワードを共有せずに自分に代わって行動するアプリケーションを承認できます。

ユーザーに代わって保護されたデータを保存している場合、アクセスするためにパスワードをウェブ上に広めてはいけません。代わりに、OAUTHを使用して、アカウントの資格情報を保護しながら、ユーザーがデータにアクセスできるようにすることができます。 PHPクラスのコーディング

PHPクラスをコーディングするときに、OAuth認証を使用してTwitterへのHTTPリクエストがどのように作成されるかについての実行ダウン。 最初に、Twitterのアプリケーション管理センターに向かいます。キーをつかみ、トークンにアクセスするアプリケーションを作成します。

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>
ログイン後にコピー
ログイン後にコピー
次は、HTTPリクエストのGETまたはPOSTパラメーターを受け入れるメソッドです。

プライベートメソッド_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署名を生成します。

<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>

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>
ログイン後にコピー
oauth_signature_method - 頻繁に

“ hmac-sha1”

  • oauth_token - アプリケーションoauthトークン。
  • oauth_timestamp - time()
  • で作成された現在のタイムスタンプ
  • oauth_version - Twitterはバージョン1.0 を使用します oauth_signature - _generate_oauth_signature()
  • によって生成されたoauth署名
  • リクエスト方法またはhttp動詞もrequest_methodプロパティに保存されます。
  • ここに、私たちが話したauthorization_header()メソッドのコードがあります。
  • process_request()は、要求方法に応じてwp_remote_get()またはwp_remote_post()を使用してget or requestを送信し、その後wp_remote_retrieve_body()。
WordPress HTTP APIとそれがどのように機能するかをよりよく理解するために、このチュートリアルを参照してください。

そして最後に、クラスを閉じます。

<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>
ログイン後にコピー
ログイン後にコピー
すべてがうまくいけば、変数$の結果には、最近のツイートのJSONデータが入力されます。 たとえば、投稿リクエストについては、プロフィールの説明を更新するとします。

クレジットとリソース

このクラスの構造とコードは、ジェームズ・マリソンの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 APIとOAuthの詳細については、以下のリソースを参照してください。

oauth認証は

に陥りました

Twitter OAuthがシナリオコンテキストでどのように機能するか

Twitterのドキュメント
  • php oauthサーバーの作成
  • ietf rfc
  • 結論
  • この記事では、WordPress HTTP APIを搭載したHTTPクライアントクラスを使用してOAUTHとTwitterを消費する方法について学びました。前述のように、このクラスは、WordPress HTTP APIを使用するため、WordPressプラグイン内で使用する必要があります。このPHPクラスは、たとえば最近のツイートウィジェットなど、建物に役立つことがあります。
  • コードはGitHubで利用できます。お気軽にフォークしたり、プルリクエストを送信したりすることもできます。
  • 私の今後のチュートリアルに遅れずについていくために、WordPressチャンネルを購読してください。
ハッピーコーディング。

oauth、twitter、およびwordpress http api

に関するよくある質問

WordPressサイトでOAUTH2をセットアップするにはどうすればよいですか?

WordPressサイトでOAUTH2のセットアップには、OAUTH2プラグインのインストールと構成が含まれます。 WordPressプラグインディレクトリで利用可能ないくつかのプラグインから選択できます。プラグインをインストールしたら、クライアントIDやクライアントSecretなど、OAUTH2プロバイダーの詳細でそれを構成する必要があります。また、プロバイダーの要件に応じて、リダイレクトURLとスコープをセットアップする必要があります。安全な委任されたアクセス。これにより、ユーザーはパスワードを共有せずにTwitterアカウントへのサードパーティのアプリケーションアクセスを許可できます。これは、アプリケーションがお客様に代わってTwitterと対話し、ツイート、タイムラインの読み取り、新しいユーザーのフォローなどのアクションを実行できることを意味します。 TwitterのAPIの問題は、アプリケーションが正しく構成され、正しいAPIキーを使用していることを確認することで修正できます。また、アプリケーションがTwitterのレート制限を超えていないことを確認する必要があります。まだ問題が発生している場合は、さらなる支援のためにTwitterの開発者サポートに連絡する価値があるかもしれません。 ​​OAUTH1.0とOAUTH2.0の違いは、どちらも安全なAPI許可のプロトコルです。ただし、OAUTH2.0はより合理化された強力なプロトコルです。開発者により柔軟性が高まり、モバイルやデスクトップアプリケーションなど、さまざまなプラットフォームのアプリケーションに使用できます。一方、OAuth1.0はより複雑で柔軟性が低くなります。 WordPressサイト。これは、Twitter APIなどの外部APIとの対話に役立ちます。 WordPress HTTP APIを使用するには、wp_remote_getまたはwp_remote_post関数を使用して、対話するAPIエンドポイントのURLを渡す必要があります。 OAUTHトークンを確保することは、アプリケーションへの不正アクセスを防ぐために重要です。安全なデータベースなど、常にトークンを安全に保存し、クライアント側のコードに露出しないでください。また、トークンの有効期限とリフレッシュトークンも実装して、トークンが侵害されても、無期限に使用できないことを確認する必要があります。 > OAUTHとWordPressを統合する際に直面するいくつかの一般的な問題には、OAUTHプラグインの誤った構成、URLのリダイレクトの問題、OAUTHプロバイダーのAPIの問題が含まれます。これらの問題は通常、構成を慎重にチェックし、正しいAPIキーを使用してURLをリダイレクトすることを確認することで解決できます。 Twitterを使用すると、APIにはアプリケーションの構成を確認し、正しいAPIキーを使用していることを確認し、アプリケーションがTwitterのレート制限を超えていないことを確認できます。また、TwitterのAPIリファレンスドキュメントを使用して、APIの予想される動作を理解し、潜在的な問題を特定することもできます。 .0 Twitter APIを使用すると、Twitterアプリケーションを作成してAPIキーを取得する必要があります。次に、これらのキーを使用してアクセストークンを取得する必要があります。これは、APIリクエストの認証に使用できます。 TwitterのOAUTH2.0の実装はアプリケーションのみであることに注意してください。つまり、ユーザーコンテキストを必要としないリクエストにのみ使用できます。

WordPress用のMiniorange OAuth 2.0サーバープラグインは、WordPressサイトにOAUTH2.0サーバーをセットアップするためのシンプルで安全な方法を提供します。承認コード、暗黙、パスワード、クライアントの資格情報など、複数の助成金タイプをサポートし、JWTとSAMLもサポートしています。これにより、WordPressサイトにOAuth2.0を実装するための柔軟で強力な選択肢になります。

以上がOauth、Twitter、WordPress HTTP APIおよびあなたの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート