を参照してください。これらの機能をWebサイトに実装する必要がある場合は、その機能を最大限に活用するためにAPIなどを理解する必要があります。
はのが唯一のGoogleについてのみ話しましょう。このhttps://developers.google.com/google-apps/contacts/v3/?csw=1#audience
を通過します。残りのプロバイダも同様の手順で管理できます。ここでは、この作業にdjango-allauthを使用しています。
関わる基本的な手順は以下のとおりです。
あなたのアプリを作成して、プロバイダを使用して設定されます。そのためには、Google(またはFacebookなど)でデベロッパープロフィールが必要です。あなたはGoogle開発者向けのコンソールでアプリを作成しなければなりません。インターネット上でこれについて多くのチュートリアルを見つけることができます。それはあなたのサイトでgoogleが有効になってサインアップしているので、あなたによって行われています。それはOauth2.0のサーバー側です
これで、必要な権限の範囲を定義する必要があります。あなたは公開プロフィールのものを見るためにアクセスする必要があります。メール、ID、性別などが含まれている可能性があります。あなたのアプリのためには、ユーザーの連絡先が必要です。そのためには、それもスコープに含める必要があります。 これはsettings.pyでのみ行われます。
'Googleの:{ 'SCOPE':[ 'プロフィール'、 'メール'、 'https://www.googleapis.com/auth/contacts ']、 'AUTH_PARAMS'{' ACCESS_TYPE': 'オンライン'}}次に }
ここで、あなたは連絡先へのアクセス権を持っています。これで、データ所有者(ユーザー)の同意を得て連絡先を抽出するだけです。
この目的のために、回答の最初のリンクに従うことができます。あなたがしなければならないことは、いくつかの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())