Google API(ContactsAPIの例)および純粋なHTTPでのOAuth2.0の最初の経験

プロジェクトを書くとき、Google Contacts Bookにエントリーを追加する必要がありました。 すべてがシンプルなようです。APIがあり、それを使用して使用しますが、すぐに入手して使用することはできません。 多くのドキュメント、相互参照(もちろんロシア語ではありません)。 すべてを理解するのに長い時間がかかりました。 さらに、他の言語のコードなしで純粋なHTTPプロトコルを使用する例が必要でした。 すべてがうまくいった後、私はここに書いて誰かを多くの時間を節約し、棚にすべてのステップを置くことにしました。 多くの人にとって、特にこの記事はほとんどGoogle翻訳の翻訳と簡略化であるため、ここには新しいものはありません。



最初の部分。 アプリケーションの作成と構成



したがって、特に私の目的のために、Contacts APIを使用する必要がありました。 APIを有効にするGoogleアカウントに移動します。 リンクをたどる

console.developers.google.com/iam-admin/projectsをクリックし、「プロジェクトの作成」をクリックします。



画像



次に、Googleが提供するすべてのことを、どこにでも向けることなく行います。 プロジェクトの名前などを設定します



プロジェクトの作成が完了したら、すべてのプロジェクトデータ(ID、シークレットなど)を含むファイルをダウンロードできます。



APIも有効にする必要があります。 これを行うには、 console.developers.google.com / apis /に移動して、リストから必要なAPIを選択し、開いたタブで[APIを有効にする]をクリックします。 それだけです、最初のステップは終わりました。



第二部。 トークンを受け取る



APIにアクセスするには、OAuth 2.0標準に従ってアクセストークンを取得する必要があります。 これは、おそらく、私にとって最も難しいものでした。 どのように、どこで、どのようなリクエストを、どの順番で送信するのかを理解するのはそれほど簡単ではありません。



後でプログラムで使用できるトークンを取得するために、HTTPRequesterと呼ばれるFirefoxの拡張機能を使用しました。



1.コードを取得する

このステップで、ユーザーはアクセスを求められます。 リクエストの例(記号*はアプリケーションの一部のデータを置き換えただけです):



https://accounts.google.com/o/oauth2/v2/auth?scope=https://www.google.com/m8/feeds&access_type=offline&include_granted_scopes=true&redirect_uri=urn:ietf:wg:oauth:2.0:oob&response_type=code&client_id=921647******-l5jcha3bt7r6q******bhtsgk*****um6.apps.googleusercontent.com
      
      





いくつかのオプションの詳細:



scopeはアクセスするサービスです。 連絡先はwww.google.com/m8/feedsです。 さまざまなサービスのアドレスのリストは、 developers.google.com / identity / protocols / googlescopesにあります。



access_type-アクセスのタイプ。 ユーザーの介入なしでトークンを更新する必要がある場合は、必ずオフライン値を使用してください。 値がオンラインである可能性もありますが、選択するときは、ブラウザでユーザーに許可を求める必要があります。



redirect_uriおよびclient_id-最初の段階でダウンロードされたプロジェクトファイルで指定されたデータ。



このGET要求を実行すると、権限ページが表示されます。



画像



[許可]をクリックすると、次のようなコードが表示されます(*-データを置き換えます):

4 / iLcXnhpU8NvMHT5aTy8JjXhcROERzkvKq ********



2.トークンを取得する

承認されたアクセストークンを受信するには、アドレスにPOSTリクエストを送信する必要があります

www.googleapis.com/oauth2/v4/token必須 、リクエストのコンテンツタイプはapplication / x-www-form-urlencodedである必要があります)。



リクエストの本文には、次のパラメーターが含まれている必要があります。



 code=4/iLcXnhpU8NvMHT5aTy8JjXhcROERzkvKq********&client_id=921647******-l5jcha3bt7r6q******bhtsgk*****um6.apps.googleusercontent.com&client_secret=hi1W9GAKGer************&redirect_uri=urn:ietf:wg:oauth:2.0:oob&grant_type=authorization_code
      
      





どこで

コード -前のステップで取得したデータ。

grant_typeは必須パラメーターであり、「authorization_code」と同じである必要があります(ある種の認証コード、つまりauthorization_codeの文字ではありません)。



アクセストークンとアクセストークン更新トークンを示すJSON形式の応答を受け取ります。



回答例:



画像



3.アクセストークンを更新する

アクセストークン(access_token)は、expires_inパラメーターで指定された限られた時間の間有効です。 有効期限が切れると、アクセストークンは更新トークン(refresh_token)によって更新されます。



これを行うには、 www.googleapis.com / oauth2 / v4 / tokenで POSTリクエストを行う必要があります( 必須 、リクエストのコンテンツタイプはapplication / x-www-form-urlencodedである必要があります)。

リクエスト本文:



 client_id=921647******-l5jcha3bt7r6q******bhtsgk*****um6.apps.googleusercontent.com&client_secret=hi1W9GAKGer************&refresh_token=1/rCIfgox0M7ul5uKHasqk****************&grant_type=refresh_token
      
      





回答では、再びJSON形式で、新しいアクセストークンを受け取ります。



受信したすべてのデータを使用して、タスクを実行できます。 上記のすべては、OAuth 2.0プロトコルを使用したアプリケーションの承認です。 さらに、承認されたリクエストを実行するには、パラメーター内のアクセストークンを転送する必要があります(http://google..................com/?Access_token = ya.23 ****** ***********)。



Contacts APIの使用



このタスクでは、連絡先の追加、連絡先のリストの取得、連絡先の削除の3つのアクションのみが必要でした。



1.連絡先リストを取得する

連絡先リストを取得するには、パラメータを指定してGETリクエストを送信するだけです。 リクエストの例:



www.google.com/m8/feeds/contacts/gmm ********@gmail.com/full?access_token=ya29.GlwbBFzl0uXJG6yt_Wdgr6vI4KJ88Djw85H************************* ********************************** *

回答では、データを解析し、連絡先の数、説明、およびIDを取得できます。

gmm**********@gmail.comは私のアカウントのアドレスです。



2.連絡先を追加する

アドレス帳に連絡先を追加するには、パラメーターにアクセストークンを含むPOSTリクエストを送信する必要があります。 ( 必須要求のコンテンツタイプはapplication / atom + xmlである必要があります)。 リクエストの例:



www.google.com/m8/feeds/contacts/gmm *********@gmail.com/full?access_token=ya29.GlwYBLz6AgOE9Xs****************** ***************************************************** **********。

リクエスト本文(Googleドキュメントから取得):



 <atom:entry xmlns:atom="http://www.w3.org/2005/Atom" xmlns:gd="http://schemas.google.com/g/2005"> <atom:category scheme="http://schemas.google.com/g/2005#kind" term="http://schemas.google.com/contact/2008#contact"/> <gd:name> <gd:givenName>Elizabeth</gd:givenName> <gd:familyName>Bennet</gd:familyName> <gd:fullName>Elizabeth Bennet</gd:fullName> </gd:name> <atom:content type="text">Notes</atom:content> <gd:email rel="http://schemas.google.com/g/2005#work" primary="true" address="liz@gmail.com" displayName="E. Bennet"/> <gd:email rel="http://schemas.google.com/g/2005#home" address="liz@example.org"/> <gd:phoneNumber rel="http://schemas.google.com/g/2005#work" primary="true"> (206)555-1212 </gd:phoneNumber> <gd:phoneNumber rel="http://schemas.google.com/g/2005#home"> (206)555-1213 </gd:phoneNumber> <gd:im address="liz@gmail.com" protocol="http://schemas.google.com/g/2005#GOOGLE_TALK" primary="true" rel="http://schemas.google.com/g/2005#home"/> <gd:structuredPostalAddress rel="http://schemas.google.com/g/2005#work" primary="true"> <gd:city>Mountain View</gd:city> <gd:street>1600 Amphitheatre Pkwy</gd:street> <gd:region>CA</gd:region> <gd:postcode>94043</gd:postcode> <gd:country>United States</gd:country> <gd:formattedAddress> 1600 Amphitheatre Pkwy Mountain View </gd:formattedAddress> </gd:structuredPostalAddress> </atom:entry>
      
      





構造全体は同じままにして、個人データ(名前、番号など)のみを変更します。



3.連絡先を削除する

連絡先を削除するには、そのID(連絡先を追加するとき、または連絡先のリスト全体を受信するときの応答で取得できます)を見つけて、DELETE要求を送信する必要があります。



重要! If-Matchパラメーターを要求ヘッダーに追加し、その値を*に設定する必要があります。 これがないと、連絡先を削除できません。



リクエストの例:



www.google.com/m8/feeds/contacts/gmm ***@gmail.com/base/5a5415d78e677387?access_token=ya29.GlwYBLz6AgOE9Xsnt8Z1raYaa3fB********************** *

5a5415d78e677387-連絡先ID。



元のGoogleドキュメント:



WebサーバーアプリケーションでのOAuth 2.0の使用。

Google Contacts API。



それだけです。誰かが便利な記事を書いてくれたらとてもうれしいです。 個人的に、私にとっては、最初にgoogle APIに遭遇した人にとって、これらすべてに対処することは非常に困難でした。



All Articles