2016-04-18 14 views
0

私はdjango 1.7、python 3.4で構築されたウェブサイトを持っています。私は自分のウェブサイトに自分のGmailの連絡先を招待できるようにしたいと思っています(リンクされた&他の多くのウェブサイトのように)。私はOauth2.0を使用しており、その連絡先にアクセスする許可を得ることができます。しかし、私はどのように進むべきか、どのような措置を講じるか考えていない。Googleの連絡先apiを使用してユーザーがGmailの連絡先を自分のdjangoのウェブサイトに招待する方法

誰かが私が取る必要があるすべてのステップの概要と、それを行う方法に関する少しの説明を手伝ってもらえますか?

適切な投稿へのリンクさえも役立ちます。

答えて

2

を参照してください。これらの機能をWebサイトに実装する必要がある場合は、その機能を最大限に活用するためにAPIなどを理解する必要があります。

はのが唯一のGoogleについてのみ話しましょう。このhttps://developers.google.com/google-apps/contacts/v3/?csw=1#audience

を通過します。残りのプロバイダも同様の手順で管理できます。ここでは、この作業にdjango-allauthを使用しています。

関わる基本的な手順は以下のとおりです。

  1. あなたのアプリを作成して、プロバイダを使用して設定されます。そのためには、Google(またはFacebookなど)でデベロッパープロフィールが必要です。あなたはGoogle開発者向けのコンソールでアプリを作成しなければなりません。インターネット上でこれについて多くのチュートリアルを見つけることができます。それはあなたのサイトでgoogleが有効になってサインアップしているので、あなたによって行われています。それはOauth2.0のサーバー側です

  2. これで、必要な権限の範囲を定義する必要があります。あなたは公開プロフィールのものを見るためにアクセスする必要があります。メール、ID、性別などが含まれている可能性があります。あなたのアプリのためには、ユーザーの連絡先が必要です。そのためには、それもスコープに含める必要があります。 これはsettings.pyでのみ行われます。

    'Googleの:{ 'SCOPE':[ 'プロフィール'、 'メール'、 'https://www.googleapis.com/auth/contacts ']、 'AUTH_PARAMS'{' ACCESS_TYPE': 'オンライン'}}次に }

  3. ここで、あなたは連絡先へのアクセス権を持っています。これで、データ所有者(ユーザー)の同意を得て連絡先を抽出するだけです。

この目的のために、回答の最初のリンクに従うことができます。あなたがしなければならないことは、いくつかのURL( 'https://www.google.com/m8/feeds/contacts/default/full' + '?access_token =' + access_token)にリクエストを送信する必要があるということです。リクエストは、特定のユーザーに対して提供した認証トークンを使用してプロバイダ(google)にのみ送られます。あなたはdbテーブルのsocialtokenで見つけることができます。適切なリクエストを送信すると、xml形式のユーザーの連絡先が表示されます。

入手したら、簡単に解析して必要な情報を抽出できます。

フローを理解するのは簡単です。 django-allauthは、&にサインアップして、スコープを定義することで異なる権限を得ることができます。

連絡先を抽出するには、独自のコードを記述することができます。

簡単な例は次のとおりです。

def get_email_google(request): 
    # social = request.user.social_auth.get(provider='google-oauth2') 
    user =request.user 

    # Code dependent upon django-allauth. Will change if we shift to another module 

    # if request.user.userprofile.get_provider() != "google": 
    a = SocialAccount.objects.get(user=user) 
    b = SocialToken.objects.get(account=a) 
    # access = b.token 
    access_token = b.token 
    url = 'https://www.google.com/m8/feeds/contacts/default/full' + '?access_token=' + access_token + '&max-results=100' 
    req = urllib2.Request(url, headers={'User-Agent' : "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/534.30 (KHTML, like Gecko) Ubuntu/11.04 Chromium/12.0.742.112 Chrome/12.0.742.112 Safari/534.30"}) 
    contacts = urllib2.urlopen(req).read() 
    contacts_xml = etree.fromstring(contacts) 
    # print 
    # return render(request, 'search/random_text_print.html', locals()) 

    result = [] 


    for entry in contacts_xml.findall('{http://www.w3.org/2005/Atom}entry'): 
     for address in entry.findall('{http://schemas.google.com/g/2005}email'): 
      email = address.attrib.get('address') 
      result.append(email) 
    return render(request, 'search/random_text_print.html', locals()) 
関連する問題