Показ дописів із міткою facebook. Показати всі дописи
Показ дописів із міткою facebook. Показати всі дописи

Python Selenium PhantomJS робота з Facebook

По замовчуванні PhantomJS на відріз відмовився працювати з Facebook, хоча webdriver.Firefox() працює прекрасно. Методом гугління, проб і помилок вияснилось, що проблема при роботі з SSL. Отже, робочий "сніпєтс":

dcap = dict(DesiredCapabilities.PHANTOMJS)
dcap["phantomjs.page.settings.userAgent"] = \
    ("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/53 (KHTML, like Gecko) Chrome/15.0.87")
wd = webdriver.PhantomJS(desired_capabilities=dcap, service_args=['--ssl-protocol=tlsv1'])
wd.set_window_size(1120, 550)
wd.get("https://www.facebook.com/")

loginza + django-avatars + facebook + vkontakte

Авторизуємось через loginza, і якщо facebook нам віддає ім'я і аватар юзернейма, зберігаємо у моделі користувачів.

def loginza_auth_handler(sender, user, identity, **kwargs):
    try:
        #loginza_models.UserMap.objects.get(user=user, verified=True)
        map = loginza_models.UserMap.objects.get(user=user)
        data = json.loads(map.identity.data)

        if data['provider'] == "http://www.facebook.com/":
            system_user = User.objects.get(username=user)
            if data['name']['first_name']:
                system_user.first_name = data['name']['first_name']
            if data['name']['last_name']:
                system_user.last_name = data['name']['last_name']
            if data['photo']:
                try:
                    Avatar.objects.get(user=system_user)
                except:
                    (filename, headers) = urllib.urlretrieve(data['photo'])
                    img_name = '%s.jpg' % os.path.basename(filename)
                    copy_path = os.path.join(settings.MEDIA_ROOT, settings.AVATAR_STORAGE_DIR, system_user.username, img_name)
                    copy_dir = os.path.join(settings.MEDIA_ROOT, settings.AVATAR_STORAGE_DIR, system_user.username)
                    if not os.path.isdir(copy_path):
                        os.makedirs(copy_dir)
                    shutil.copy2(filename, copy_path)
                    path_ava = os.path.join(settings.AVATAR_STORAGE_DIR, system_user.username, img_name)

                    avatar = Avatar(
                        user = system_user,
                        primary = True,
                        avatar = path_ava,
                    )
                    avatar.save()
            system_user.save()

        auth.login(sender, user)

Для Вконтактє ситуація аналогічна, лише Вконтактє віддає малюнок з розширенням, а Фейсбук без.