Vk backend: На каком языке написаны vk, toster, google+? — Хабр Q&A

Содержание

Вакансия «Backend-разработчик (ВКонтакте для бизнеса)» в Москве, работа в компании «VK» — Хабр Карьера

Требования

Бэкенд разработчик, Старший (Senior) • PHP • Laravel • Symfony • Yii framework • Высоконагруженные системы • Базы данных • ООП • Разработка программного обеспечения

Местоположение и тип занятости

Москва • Полный рабочий день • Можно удаленно

Компания

Место встречи лучших

Описание вакансии

Сейчас мы в поиске backend-разработчиков в команды Маркет и Ликвидность. 

Маркет – это полноценная e-commerce площадка внутри социальной сети ВКонтакте, где можно найти любимые товары от крупных и локальных брендов. Наша команда ежедневно совершенствует опыт покупателей и разрабатывает механики для безопасных и комфортных покупок с учетом геолокации, персональных рекомендаций, отзывов и рейтингов.

Команда Ликвидности занимается развитием и увеличением активных бизнес-сообществ в социальной сети ВКонтакте, помогает расти бизнесу и уменьшать операционные расходы за счет алгоритмов продвижения, поиска точек роста ликвидности, умных настроек ленты и поиска. Автораспознавание, рост базы товаров и числа контактов, NPS со стороны бизнеса и покупателей – наша командная задача. Кроме этого, наша команда активно взаимодействует с другими направлениями – Видео, Лентой, Таргетом, поэтому у нас ты найдешь широкий простор для развития и интересных задач.

Стек технологий: KPHP (PHP 7.4), Golang, MongoDB, MeowDB, Kafka, Tarantool.

Тебе предстоит:

  • работать с большим объемом данных;
  • проектировать и реализовывать серверную часть продукта;
  • создавать гибкие API-методы для мобильных приложений и сервисов наших партнеров;
  • взаимодействовать с коллегами из других компаний и вместе строить комплексные продуктовые связки из фич;
  • участвовать в оценке и реализации продуктовых решений, которыми в течение пары недель начнут пользоваться реальные люди.

Мы ждем от тебя:

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

Работа в VK — это:

  • возможность создавать продукты и сервисы, которые меняют к лучшему жизнь миллионов пользователей;
  • амбициозные задачи, масштабные проекты и возможности для профессионального роста;
  • совместные интересы и увлечения: помогаем раскрывать таланты и отлично проводить свободное время;
  • работа в команде профессионалов из разных сфер, которые всегда готовы поделиться опытом;
  • программа благополучия: заботимся о здоровье и хорошем самочувствии сотрудников.

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

Смотреть ещё вакансии

Weekend Offer VK

Weekend Offer в VK — шанс попасть в команду профессионалов всего за одни выходные

ВКонтакте — крупнейшая социальная сеть в России и странах СНГ.

Наша миссия — соединять людей, сервисы и компании, создавая простые и удобные инструменты коммуникации.

  • Android

    узнать больше о командах
  • узнать больше о командах
  • BackEnd
    (C++)

    узнать больше о командах
  • Команда разработки движков

    Движки — это специализированные базы данных: ВКонтакте использует их, чтобы хранить всю информацию, которую загружают пользователи на сайт. Сотни петабайт фото и аудио, миллиарды постов, комментариев и сообщений ежедневно, рекламные объявления — это и не только мы бережно размещаем на эффективных и надёжных системах хранения.

    • Мы любим выжимать максимум производительности из своего кода, думаем о свойствах системы в целом и делаем решения, которые легко использовать и масштабировать.

      • Разрабатывать специализированные структуры данных и алгоритмы.
      • Заниматься оптимизацией на системном и прикладном уровне.
      • Участвовать в проектировании новых систем.
      • Работать над механизмами надёжности и масштабируемости решений.
    • Мы каждый день сталкиваемся со сложными проблемами и постоянно ищем оптимальные решения. Разрабатываем собственные технологии — они учитывают природу данных, с которыми мы работаем. Если вы хотели поработать в сердце высоконагруженной системы, мы сработаемся.

      • C++ 17/20.
      • Make или CMake.
      • GCC или Clang.
      • Инструменты Unix.
    участвовать

Как проходит Weekend Offer?

  • 21 февраля — 10 марта

    Первая встреча

    После рассмотрения откликов мы пригласим кандидатов с подходящим опытом на первый звонок — он займёт 15–30 минут.
    Коротко расскажем о командах и проведём небольшой технический скрининг. Если всё пройдёт успешно, позовём на технический этап в субботу. По времени для встречи будем договариваться в пятницу, 10 марта.

  • 11 марта

    Детальное знакомство

    С 10:00 по Москве выступят руководители направлений и команд. На общей онлайн-встрече вы узнаете про процессы и задачи, которые предстоит решать, и получите ответы на вопросы.

    С 11:00 до 19:00 пройдут индивидуальные технические онлайн-собеседования, пообщаемся с вами в заранее назначенное время.

  • 12 марта

    Финальное собеседование

    Вы сможете пообщаться с понравившимися командами, узнать больше о предстоящих вызовах и получить ответы на вопросы. Встречи будут проходить с 11:00 до 18:00.

Отправляйте ваши отклики до 9 марта включительно

Выберите направление

social-core/vk.py на мастере · python-social-auth/social-core · GitHub

«»»
VK.com OpenAPI, OAuth3 и Iframe серверные части приложения OAuth3, документы по адресу:
https://python-social-auth.
readthedocs.io/en/latest/backends/vk.html
«»»
импорт json
из hashlib импорта md5
от времени импорта времени
из ..exceptions import AuthException, AuthTokenRevoked
из ..utils import parse_qs
из .base импорта BaseAuth
из импорта .oauth BaseOAuth3
класс ВКонтактеOpenAPI(BaseAuth):
«»»Бэкенд аутентификации VK. COM OpenAPI»»»
имя = «vk-openapi»
ID_KEY = «id»
по определению get_user_details (я, ответ):
«»»Вернуть данные пользователя из запроса ВКонтакте»»»
псевдоним = response.get(«псевдоним») или «»
полное имя, имя_имя, фамилия_имя = self.get_user_names(
first_name=response.get(«first_name», [«»])[0],
last_name=response. get(«last_name», [«»])[0],
)
возврат {
«имя пользователя»: response[«id»] если len(псевдоним) == 0 иначе псевдоним,
«электронная почта»: «»,
«полное имя»: полное имя,
«имя_имя»: имя_имя,
«last_name»: фамилия,
}
def user_data (я, access_token, * args, ** kwargs):
вернуть self. data
деф auth_html(я):
«»»Возвращает локальную страницу аутентификации ВКонтакте, не требуется для
ВК для аутентификации.
«»»
ктх = {
«VK_APP_ID»: self.setting(«APP_ID»),
«VK_COMPLETE_URL»: self.redirect_uri,
}
local_html = self.setting(«LOCAL_HTML», «vkontakte.html»)
возврат self. strategy.render_html(tpl=local_html, context=ctx)
по определению auth_complete(self, *args, **kwargs):
«»»Выполняет проверку авторизации в ВКонтакте, возвращает User if
удалось»»»
session_value = self.strategy.session_get(«vk_app_» + self.setting(«APP_ID»))
, если «id» не в self.data или не в session_value:
поднять ValueError(«Аутентификация ВКонтакте не завершена»)
сопоставление = parse_qs (значение_сеанса)
check_str = «». join(
элемент + «=» + сопоставление [элемент] для элемента в [«expire», «mid», «secret», «sid»]
)
Ключ, секрет = self.get_key_and_secret()
хеш = md5((check_str + secret).encode(«utf-8»)).hexdigest()
, если хэш != отображение[«sig»] или int(mapping[«expire»]) < time():
поднять ValueError («Ошибка аутентификации VK.com: неверный хэш»)
kwargs.update({«backend»: self, «response»: self. user_data(mapping[«mid»])})
вернуть self.strategy.authenticate(*args, **kwargs)
деф использует_перенаправление (я):
«»»VK.com не требует посещения URL сервера для заказа
для аутентификации, поэтому методы auth_xxx вызывать не нужно.
Их текущая реализация является просто примером»»»
возврат Ложь
класс VKOAuth3 (BaseOAuth3):
«»»Бэкенд аутентификации VKOAuth3″»»
имя = «vk-oauth3»
ID_KEY = «id»
AUTHORIZATION_URL = «https://oauth. vk.com/authorize»
ACCESS_TOKEN_URL = «https://oauth.vk.com/access_token»
ACCESS_TOKEN_METHOD = «ПОСТ»
EXTRA_DATA = [(«id», «id»), («expires_in», «expires»)]
по определению get_user_details (я, ответ):
«»»Вернуть данные пользователя из аккаунта ВКонтакте»»»
полное имя, имя_имя, фамилия_имя = self.get_user_names(
first_name=response.get(«first_name»), last_name=response.get(«last_name»)
)
возврат {
«имя пользователя»: response. get(«имя_экрана»),
«электронная почта»: response.get(«электронная почта», «»),
«полное имя»: полное имя,
«имя_имя»: имя_имя,
«last_name»: фамилия,
}
def user_data (я, access_token, * args, ** kwargs):
«»»Загружает данные пользователя из службы»»»
запрос_данные = [
«имя»,
«фамилия»,
«имя экрана»,
«псевдоним»,
«фото»,
] + self. setting(«EXTRA_DATA», [])
полей = «,».join(set(request_data))
данные = vk_api(
себя,
«users.get»,
{
«access_token»: access_token,
«поля»: поля,
},
)
, если данные и data. get(«ошибка»):
ошибка = данные[«ошибка»]
msg = error.get(«error_msg», «Неизвестная ошибка»)
, если error.get(«код_ошибки») == 5:
поднять AuthTokenRevoked(я, сообщение)
иначе:
поднять AuthException (я, сообщение)
, если данные:
данные = data.get(«ответ»)[0]
data[«user_photo»] = data.get(«photo») # Обратная совместимость
возврат данных или {}
класс VKAppOAuth3 (VKOAuth3):
«»»Поддержка аутентификации приложений VK. com»»»
имя = «вк-приложение»
по определению auth_complete(self, *args, **kwargs):
required_params = («is_app_user», «viewer_id», «access_token», «api_id»)
, если не все (параметр в self.data для параметра в required_params):
возврат Нет
auth_key = self.data.get(«auth_key»)
# Проверить подпись, если она есть
Ключ, секрет = self. get_key_and_secret()
, если ключ_авторизации:
check_key = md5(
«_».join([key, self.data.get(«viewer_id»), секрет]).encode(«utf-8»)
).hexdigest()
, если check_key != auth_key:
поднять ValueError(«Аутентификация ВКонтакте не удалась: неверный » «ключ авторизации»)
user_check = self.setting(«РЕЖИМ ПОЛЬЗОВАТЕЛЯ»)
user_id = self.data.get(«viewer_id»)
, если user_check не None:
user_check = int(user_check)
, если user_check == 1:
is_user = self. data.get(«is_app_user»)
Элиф user_check == 2:
is_user = vk_api(self, «isAppUser», {«user_id»: user_id}).get(
«ответ», 0
)
, если не int(is_user):
возврат Нет
auth_data = {
«авторизация»: сам,
«бэкенд»: сам,
«запрос»: self. strategy.request_data(),
«ответ»: {
self.ID_KEY: user_id,
},
}
auth_data[«ответ»].update(
json.loads(auth_data[«запрос»][«api_result»])[«ответ»][0]
)
возврат self.strategy.authenticate(*args, **auth_data)
def vk_api (серверная часть, метод, данные):
«»»
Вызывает метод OpenAPI ВКонтакте, проверка:
https://vk. com/apiclub
http://goo.gl/yLcaa
«»»
# Нам нужно выполнить вызов на стороне сервера, если нет access_token
data[«v»] = backend.setting(«API_VERSION», «5.131»)
, если «access_token» отсутствует в данных:
Ключ, секрет = backend.get_key_and_secret()
, если «api_id» отсутствует в данных:
данные[«api_id»] = ключ
данные[«метод»] = метод
данные[«формат»] = «json»
URL = «https://api. vk.com/api.php»
param_list = sorted(list(item + «=» + data[item] для элемента данных))
data[«sig»] = md5((«».join(param_list) + secret).encode(«utf-8»)).hexdigest()
иначе:
url=»https://api.vk.com/method/» + метод
попытка:
вернуть backend.get_json(url, params=data)
кроме (TypeError, KeyError, OSError, ValueError, IndexError):
возврат Нет

вк-запросы

vk. com — крупнейшая социальная сеть в России.

Требования

  • питон (2.7, 3.4, 3.5, 3.6)

ПРИМЕЧАНИЕ. Python 2.7 больше не будет поддерживаться, начиная с версии 2.0.0

Установить

 pip install vk-запросы
 

Использование и функции

Простые запросы

 # Возвращает список пользователей
api.users.get(users_ids=1)
# Возвращает список друзей пользователя с дополнительными полями
api.friends.get(user_id=1, fields=['псевдоним', 'город'])
# Возвращает список результатов из вашего пользовательского метода API
api.execute.YourMethod(**method_params)
 

Токен пользователя с логином и паролем

Подходит для варианта использования, когда вы запускаете запросы из одного на серверной части из одной из ваших учетных записей

 импорт vk_requests
API = vk_requests.create_api(app_id=123, логин='Пользователь', пароль='Пароль')
api.users.get(user_ids=1)
[{'first_name': 'Павел', 'last_name': 'Дуров', 'id': 1}]
 

Использование токена службы

Токен службы предпочтительнее, так как он не требует учетные данные и запросы oauth, но не все методы могут быть вызваны с сервисным токеном (например, выполнить нельзя)

 API = vk_requests. create_api(service_token="{YOUR_APP_SERVICE_TOKEN}")
...
 

Дополнительные сведения о токене службы.

Использование маркера доступа клиента

Например, когда вы получили токен на стороне клиента (неявный поток) и хотите запросить API на стороне сервера.

Используйте параметр service_token , как в примере выше.

Токен пользователя с client_secret (прямая авторизация)

Доверенные приложения могут получить неограниченное количество access_token для доступа к API, передав идентификатор приложения, имя пользователя, пароль и client_secret — секретный ключ вашего приложения.

 API = vk_requests.create_api(app_id=123, логин='Пользователь', пароль='Пароль',
                             client_secret="{ВАШЕ_ПРИЛОЖЕНИЕ_КЛИЕНТ_СЕКРЕТ}")
...
 

Дополнительная информация о прямой авторизации.

Использование пользовательских параметров

Область действия или версия API

Просто передайте область действия и/или api_version параметры, такие как

 API = vk_requests. create_api(..., scope=['offline', 'status'], api_version='5.00')
api.status.set(text='Привет, мир!')
 
Параметры HTTP

Чтобы переопределить параметры http запросов (например, параметры ssl), просто используйте http_params следующим образом:

 API = vk_requests.create_api(http_params={'timeout': 15, 'verify': False})
 
Использование HTTP-прокси

Чтобы использовать прокси-сервер, просто передайте его в http_params , например

 прокси = {
    'http': 'http://10.10.1.10:3128',
    'https': 'http://10.10.1.10:1080',
}
API = vk_requests.create_api(http_params={'прокси': прокси})
 

Дополнительные сведения см. в документации по запросам

.

Включить ведение журнала

Чтобы включить ведение журнала библиотеки в вашем проекте, вы должны сделать следующее:

 ведение журнала импорта
# Настраиваем базовую конфигурацию
ведение журнала.basicConfig(
    уровень = logging.INFO,
    format='%(asctime)s %(имя уровня)s [%(имя)s] %(сообщение)s',
)
# Чтобы изменить уровень журнала для библиотечного регистратора
logging. getLogger('vk-requests').setLevel(logging.DEBUG)
 

Автоматическое разрешение конфликтов при получении доступа из необычного места

Просто передайте свой номер телефона во время инициализации API. В случае проверки безопасности это будет обработано автоматически, иначе будет запрошен ввод консоли

 API = vk_requests.create_api(
    app_id=123, логин='Пользователь', пароль='Пароль', phone_number='+734567')
 

Интерактивный сеанс

Интерактивный сеанс позволяет управлять параметрами входа в систему во время выполнения.

Полезно, если

  • Требуется аутентификация 2FA
  • Требуется CAPTCHA
  • Для тестирования

Использование

 API = vk_requests.create_api(..., интерактивный=Истина)
 

Если вы не передадите логин, пароль и app_id вас попросят подсказать, т.е. имея это

 API = vk_requests.create_api(app_id=XXX, логин='***', пароль='***', интерактивный=True)
 

Вам будет предложено ввести только Двухфакторную аутентификацию или капчу код при необходимости

API потоковой передачи

Streaming API позволяет подписаться на события из вк.

ПРИМЕЧАНИЕ. Только для python 3.4 и выше

Установить

 pip install vk-запросы [стриминг]
 

Правила потоковой передачи

 из vk_requests.streaming import StreamingAPI
streaming_api = StreamingAPI(service_token="{YOUR_SERVICE_TOKEN}")
# Добавить новое правило
streaming_api.add_rule (значение = 'my_keyword', тег = 'tag1')
# Получить все правила
правила = streaming_api.get_rules()
# Удалить правило по тегу
streaming_api.remove_rule (тег = 'тег1')
 

Потребитель

Streaming API предоставляет удобный интерфейс обработчика на основе сопрограммы (обратный вызов)

 асинхронный импорт
из vk_requests импортировать StreamingAPI
API = StreamingAPI(service_token="{YOUR_SERVICE_TOKEN}")
поток = api.get_stream()
@stream.consumer
@asyncio.coroutine
def handle_event (полезная нагрузка):
    печать (полезная нагрузка)
если __name__ == '__main__':
    поток.потребить()
 

Официальная документация API

  • https://vk.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *