如何使用谷歌联系人api允许我的用户邀请他们的Gmail联系人到我的django网站

时间:2016-04-18 03:09:26

标签: django python-3.x oauth-2.0 gdata

我有一个用django 1.7,python 3.4构建的网站。我想让我的用户邀请他们的Gmail联系人访问我的网站(比如linkedin和许多其他网站)。我正在使用Oauth2.0并且能够获得访问其联系人的权限。但我不知道如何继续以及采取什么措施。

有人可以帮助我概述我需要采取的所有步骤,以及如何做到这一点的一些解释。

即使是指向合适职位的链接也会有所帮助。

2 个答案:

答案 0 :(得分:2)

请参阅,当您需要在网站中实现这些功能时,您必须了解API等以充分利用它。

完成此https://developers.google.com/google-apps/contacts/v3/?csw=1#audience

我们只讨论谷歌。其他提供程序也可以使用类似的步骤进行管理。在这里你使用django-allauth来完成这项任务。

所涉及的基本步骤是:

  1. 使用提供商创建和配置您的应用。为此你需要谷歌(或Facebook等)的开发者档案。您将不得不在谷歌开发者控制台中创建一个应用程序,你会在互联网上找到大量的教程。这已由您完成,因为您已在您的网站上激活谷歌注册。那是Oauth2.0的服务器端

  2. 现在您需要定义所需的授权范围。您可能只需要访问权限即可查看公共个人资料。这可能包括名字,姓氏,电子邮件,身份证,性别等。对于您的应用,您需要用户的联系人,为此您还必须将其包含在范围内。 这只在settings.py中完成。

    'google':{'SCOPE':['个人资料','电子邮件','https://www.googleapis.com/auth/contacts'],                'AUTH_PARAMS':{'access_type':'online'}} }

  3. 现在,您可以访问联系人了。现在,您只需要在数据所有者(用户)的同意下提取联系人。

  4. 为此,您可以按照答案中的第一个链接进行操作。你需要做的是你必须向某个网址发送一个获取请求('https://www.google.com/m8/feeds/contacts/default/full'+'?access_token ='+ access_token)。该请求仅向提供商(谷歌)提供其为该特定用户提供的授权令牌。您将在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())
    

答案 1 :(得分:0)

user =request.user
a = SocialAccount.objects.get(user=user)
b = SocialToken.objects.get(account=a)
# access = b.token
access_token = b.token
SCOPES = ['SCOPE_URL']
creds = client.AccessTokenCredentials(access_token, 'USER_AGENT') 
service = build('calendar', 'v3', credentials=creds)