После покупки андроид-фона, появилась необходимо перебросить всех друзей ВК с нормальными номерами телефона в Гугл контакты. В интернете ничего подходящего не нашел, поэтому пришлось написать свой скрипт на Python.
Возможности скрипта
В Гугл контакт переносится(если указано) имя и фамилия пользователя ВК, фотография профиля, День рождения, правдивые номера телефонов. Правдивость номера проверяется для номеров Украины. Если Вы из России, необходимо переписать функцию transform_phone, либо отключить проверку — заменить строки 129 и 134 на pass.
Контакты добавляются в группу «Другие контакты». Для дальнейшего редактирование пользуемся средствами гугл.
Запуск скрипта
Для работы скрипта необходим Python, Vkontakte api for Python, gdata (Google Api for Python).
Авторизация ВК происходит с помощью токена, его необходимо указать в скрипте(строка 114). Получить токен можно здесь. Для авторизации в Google надо в скрипте указать логин и пароль gmail(строки 106, 107).
Можно запускать.
Скрипт
import vkontakte
import gdata.data
import gdata.gauth
import gdata.contacts.client
import gdata.contacts.data
def transform_phone(phone):
if len(phone) < 5:
return 0
if phone[1:].isdigit():
if len(phone) == 7:
return '+38044' + phone
elif phone[0] == '+':
return phone
elif phone[0:3] == '380':
return '+' + phone
elif phone[0:2] == '80':
return '+3' + phone
elif phone[0] == '0':
return '+38' + phone
else:
return 0
else:
return 0
def transform_birthday(date):
if len(date) > 5:
year = date[date.rfind('.') + 1:]
month = date[date.find('.') + 1:date.rfind('.')]
if len(month) == 1:
month = '0' + month
day = date[0:date.find('.')]
if len(day) == 1:
day = '0' + day
gDate = year + '-' + month + '-' + day
else:
month = date[date.rfind('.') + 1:]
if len(month) == 1:
month = '0' + month
day = date[0:date.find('.')]
if len(day) == 1:
day = '0' + day
gDate = '--' + month + '-' + day
return gDate
def downloadPhoto(url, file_name):
from urllib2 import Request, urlopen
#Create the request
req = Request(url)
# Open the url
f = urlopen(req)
# Open our local file for writing
local_file = open(file_name, "wb")
#Write to our local file
local_file.write(f.read())
local_file.close()
def removeLocalPhoto(file_name):
from os import remove
remove(file_name)
def create_contact(gd_client, record):
new_contact = gdata.contacts.data.ContactEntry()
# Set the contact's name.
name = record['first_name'] + u' ' + record['last_name']
new_contact = gdata.contacts.data.ContactEntry(name=gdata.data.Name(full_name=gdata.data.FullName(text=name)))
# Set the contact's phone numbers.
if record['mobile_phone'] != 0:
new_contact.phone_number.append(gdata.data.PhoneNumber(text=record['mobile_phone'],
rel=gdata.data.WORK_REL, primay='true'))
if record['home_phone'] != 0:
new_contact.phone_number.append(gdata.data.PhoneNumber(text=record['home_phone'],
rel=gdata.data.HOME_REL))
# Set birthday
if 'bdate' in record:
new_contact.birthday = gdata.contacts.data.Birthday(when=record['bdate'])
# Send the contact data to the server.
contact_entry = gd_client.CreateContact(new_contact)
#Download photo from vk, add to google, remove from local computer
local_image_filename = record['photo_big'][record['photo_big'].rfind('/') + 1:]
downloadPhoto(record['photo_big'], local_image_filename)
gd_client.ChangePhoto(local_image_filename, contact_entry, content_type='image/jpeg')
removeLocalPhoto(local_image_filename)
if __name__ == '__main__':
#Google authorization
email = ''
password = ''
gd_client = gdata.contacts.client.ContactsClient(source='Export contacts to Google')
gd_client.ClientLogin(email, password, gd_client.source)
#VK authorization
#URL for getting token http://oauth.vk.com/authorize?client_id=2859200&scope=friends&response_type=token
vk = vkontakte.API('2859200', 'Uq9YfuXTq8RUZbrGNnEP')
vk = vkontakte.API(token='')
#Get list of VK friends
friends = vk.friends.get(fields = "first_name, last_name, bdate, contacts, photo_big", order = 'name')
iter = 1
end = str(len(friends))
#Add VK friends to Google
for record in friends:
print str(iter) + ' from ' + end
iter += 1
#VK answers only available fields
if 'home_phone' in record:
record['home_phone'] = transform_phone(record['home_phone'])
else:
record['home_phone'] = 0
if 'mobile_phone' in record:
record['mobile_phone'] = transform_phone(record['mobile_phone'])
else:
record['mobile_phone'] = 0
if 'bdate' in record:
record['bdate'] = transform_birthday(record['bdate'])
#If contact has phone, we add it
#Comment the line below, to add all vk friends to google contacts
if record['home_phone'] or record['mobile_phone']:
create_contact(gd_client, record)
Автор: clutcher