これを別の回答として追加して、これを行う方法を理解するのに役立ちます。基本的に私のコメントで述べたように、OAuth1を使用する場合は、ユーザーアカウントに関連付ける必要があります。それを回避する方法はありません。
まず、CURLを使用してWordPressのユーザー名パスワードでサイトにログインし、OAuthへのCURL呼び出しで使用できるようにCookieを保存する必要があります(CURL呼び出しを更新してCookieを含めるようにしてください)。
/programming/724107/wordpress-autologin-using-curl-or-fsockopen-in-php
次に、CURLを使用してクライアントIDとクライアントシークレットを使用してOAuthを呼び出し、一時的なoauthトークンとシークレット(リクエストトークン)を取得します
この呼び出し(およびアクセストークンを取得する呼び出し)を行うには、CURL呼び出しを正しく設定する必要があります。コードとリファレンスについては、この回答の最後をご覧ください。
一時的なoauthトークンとシークレット(リクエストトークン)を取得したら、サイトのこのURLに対してCURL POST呼び出しを行います。
http://website.com/oauth1/authorize
次に、返された認証ページのHTMLからすべての値を取得し、フォームアクションURLに独自のPOSTを送信する必要があります。
/programming/35363815/how-to-get-a-value-input-from-html-returned-of-curl
具体的には、これらをPOSTデータに含めて、「認証」POSTを完了する必要があります。 http://domain.com/wp-login.php?action=oauth1_authorize
_wpnonce
-これは送信するフォームのナンス値です。これはHTML入力から取得し、POSTで送信する必要があります
consumer
-これはHTMLの非表示入力です(これは投稿IDへの参照であるため、HTML入力から取得する必要があります)
oauth_token
-これはHTMLの非表示入力です(ただし、これも既にあるはずです)
wp-submit
-これは値に設定する必要があります authorize
認証ページ用に生成されたHTMLの例を次に示します。
<form name="oauth1_authorize_form" id="oauth1_authorize_form" action="http://website.com/wp-login.php?action=oauth1_authorize" method="post">
<h2 class="login-title">Connect My Auth</h2>
<div class="login-info">
<p>Howdy <strong>admin</strong>,<br/> "My OAuth Demo" would like to connect to Example Site.</p>
</div>
<input type="hidden" name="consumer" value="5428" /><input type="hidden" name="oauth_token" value="i1scugFXyPENniCP4kABKtGb" /><input type="hidden" id="_wpnonce" name="_wpnonce" value="ca9b267b4f" /><input type="hidden" name="_wp_http_referer" value="/wp-login.php?action=oauth1_authorize&oauth_consumer_key=TUPFNj1ZTd8u&oauth_token=i1scugFXyPENniCP4kABKtGb&oauth_token_secret=gzqW47pHG0tilFm9WT7lUgLoqN2YqS6tFFjUEiQoMgcmG2ic" /> <p class="submit">
<button type="submit" name="wp-submit" value="authorize" class="button button-primary button-large">Authorize</button>
<button type="submit" name="wp-submit" value="cancel" class="button button-large">Cancel</button>
</p>
</form>
これらすべての値/データを使用してPOSTを実行すると、これが認証コードとともに返されるHTMLになります(したがって、<code>
ブロック内から値を取得する必要があります。
<div id="login">
<h1><a href="https://wordpress.org/" title="Powered by WordPress" tabindex="-1">Example Site</a></h1>
<p>Your verification token is <code>yGOYFpyawe8iZmmcizqVIw3f</code></p> <p id="backtoblog"><a href="http://website.com/">← Back to Example Site</a></p>
</div>
検証トークンを取得したら/oauth1/access
、検証トークン、oauthトークン、およびoauthトークンシークレットを使用して呼び出しを行うことができます。検証トークンは、POSTデータに次のように入力する必要があります。oauth_verifier
これにより、新しい永続的なアクセストークンとVOILAが返されます。
CURLコードの例
以下は、CURL呼び出しを行うためのサンプルコードです。最も重要な部分oauth_signature
は、生成方法です。
https://oauth1.wp-api.org/docs/basics/Signing.html
function buildBaseString($baseURI, $method, $params){
$r = array();
ksort($params);
foreach($params as $key=>$value){
$r[] = "$key=" . rawurlencode($value);
}
return $method."&" . rawurlencode($baseURI) . '&' . rawurlencode(implode('&', $r));
}
function buildAuthorizationHeader($oauth){
$r = 'Authorization: OAuth ';
$values = array();
foreach($oauth as $key=>$value)
$values[] = "$key=\"" . rawurlencode($value) . "\"";
$r .= implode(', ', $values);
return $r;
}
// Add request, authorize, etc to end of URL based on what call you're making
$url = "http://domain.com/oauth/";
$consumer_key = "CLIENT ID HERE";
$consumer_secret = "CLIENT SECRET HERE";
$oauth = array( 'oauth_consumer_key' => $consumer_key,
'oauth_nonce' => time(),
'oauth_signature_method' => 'HMAC-SHA1',
'oauth_callback' => 'oob',
'oauth_timestamp' => time(),
'oauth_version' => '1.0');
$base_info = buildBaseString($url, 'GET', $oauth);
$composite_key = rawurlencode($consumer_secret) . '&' . rawurlencode($oauth_access_token_secret);
$oauth_signature = base64_encode(hash_hmac('sha1', $base_info, $composite_key, true));
$oauth['oauth_signature'] = $oauth_signature;
$header = array(buildAuthorizationHeader($oauth), 'Expect:');
$options = array( CURLOPT_HTTPHEADER => $header,
CURLOPT_HEADER => false,
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_SSL_VERIFYPEER => false);
$feed = curl_init();
curl_setopt_array($feed, $options);
$json = curl_exec($feed);
curl_close($feed);
$return_data = json_decode($json);
print_r($return_data);
このサイトでは、OAuth署名のエンコード方法とCURLを使用した送信方法を正確に説明しています(ページ全体を読むことをお勧めします):https :
//hannah.wf/twitter-oauth-simple-curl-requests-for-your-own-データ/
OAuth1署名の生成に関するその他のリソース:https ://stackoverflow.com/questions/24613277/oauth-signature-generation-using-hmac-sha1
その他のリソース:http :
//collaboradev.com/2011/04/01/twitter-oauth-php-tutorial/