2016-04-18 2 views
0

У меня есть сайт, созданный в django 1.7, python 3.4. Я хочу, чтобы мои пользователи приглашали контакты Gmail на мой сайт (например, linkedin &). Я использую Oauth2.0 и могу получить разрешение на доступ к своим контактам. Но я не понимаю, как действовать и какие шаги следует предпринять.Как использовать google-контакты api, чтобы позволить моим пользователям приглашать свои контакты gmail на мой сайт django

Может кто-нибудь помочь мне получить обзор всех шагов, которые мне нужно предпринять, и немного пояснить, как это сделать.

Даже ссылка на подходящее сообщение была бы полезна.

ответ

2

См., Когда вам нужно реализовать эти функции на своем веб-сайте, вам нужно будет понять API и т. Д., Чтобы использовать его в полной мере.

Переход через эту https://developers.google.com/google-apps/contacts/v3/?csw=1#audience

Давайте говорить только лишь о Google. Остальным поставщикам также можно управлять аналогичными шагами. Здесь вы используете django-allauth для этой задачи.

Основные этапы являются:

  1. Получить приложение создается и настраивается с провайдером. для этого вам понадобится профиль разработчика в google (или facebook и т. д.). Вам нужно будет создать приложение в консоли разработчика Google, и вы найдете много учебника для этого в Интернете. Это было сделано вами, поскольку у вас есть регистрация с включенным google на вашем сайте. Это серверная сторона Oauth2.0

  2. Теперь вам нужно определить область полномочий, в которой вы нуждаетесь. Вам может потребоваться доступ только для просмотра общедоступного профиля. которые могут включать имя, фамилию, адрес электронной почты, идентификатор, пол и т. д. Для вашего приложения вам нужны контакты пользователей, и для этого вам также придется включить его в область. Это делается только в settings.py.

    'Google': { 'СФЕРА': [ 'Профиль', 'электронная почта', '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 только поможет вам до регистрации & signin, где вы можете получить разные разрешения, определив область действия.

Для извлечения контактов вы можете написать свой собственный код.

Простой пример:

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()) 

 Смежные вопросы

  • Нет связанных вопросов^_^