
John
08.03.2017
09:07:36
?

Проксимов
08.03.2017
09:22:01

Dmitry
08.03.2017
09:22:37
в чем ошибка?

Google

Проксимов
08.03.2017
09:24:16
Ох ох
А где ошибка то?

Маришка
08.03.2017
09:25:34
А попробуй еще раз в foo после изменения get сделать

Dmitry
08.03.2017
09:26:16
success
мерси

Маришка
08.03.2017
09:27:11
Это было очевидно

Dmitry
08.03.2017
09:30:48
норм так?
или надо, наверное, в return token, token_exp возвращать.

Pavel
08.03.2017
09:40:25
а эти 14 минут - это всегда так будет? МОжет быть, лучше отлавливать когда запросы начнут получать отлуп от сервера, тогда получать новый токен и повторять запрос?

Dmitry
08.03.2017
09:41:18
можно еще раз в терминах "поиск в гугл" плиз)

b0g3r
08.03.2017
09:52:27
Как сервер отвечает что токен кончился - это уж надо тебе смотреть самому)

Google

Dmitry
08.03.2017
09:53:40
это легко сделать. Спасибо)
Один момент. Как это лучше реализовать? Есть куча функций, которые по апи с сврвером общаются. Токен они берут из переменной BIZ_TOKEN. Мы делаем запросы к серверу, допустим токен кончился и сервер возвращает нам 401. Прописывать проверку ответа сервера и вызов auth() в каждой функции я полагаю не верный ход мысли. Тогда как это сделать?

b0g3r
08.03.2017
09:59:00
Прописывать проверку кода ответа севера в каждом вызове - верный ход

Igor
08.03.2017
09:59:27
у requests еще есть raise_for_status()

Johnnie
08.03.2017
10:00:32
а зачем токен хранить в переменной окружения?

Dmitry
08.03.2017
10:01:04
а где его хранить?

Маришка
08.03.2017
10:02:32
.yaml ?

Dmitry
08.03.2017
10:03:29
лишний раз открывать и закрывать файл, чтобы получить токен?

Igor
08.03.2017
10:03:35
если это что-то, что меняется каждые 15 минут, то yaml - еще более херовый способ )
а SECRETS всякие через env vars часто передаются

Johnnie
08.03.2017
10:04:09
да хоть в самом скрипте, без сохранения куда-либо, потому что и так он тухнет каждые 15 минут

Igor
08.03.2017
10:04:26
ну, я так понимаю, что его еще надо передать при первом вызове скрипта
и вот тут как раз os.environ спасает, да
но я б в отдельную переменную записал, если потом есть необходимость его перезапрашивать и перезаписывать, потому что os.environ['TOKEN'] = '...' это как-то странно

Маришка
08.03.2017
10:05:13

Dmitry
08.03.2017
10:06:22
получается надо запросить у сервера токен, записать в файл, потом из файла его получить)
А правильно ли будет сделать обертку api_call() которая будет принимать функцию на вход и в которой будет храниться токен и если что обовляться?

Igor
08.03.2017
10:07:56
а зачем? о_О

Dmitry
08.03.2017
10:08:02
функция - это собственно запрос к серверу

Igor
08.03.2017
10:08:06
мне кажется, тогда уж правильнее класс намутить
APIClient

Google

Dmitry
08.03.2017
10:09:40
я так и делал пока не устал. Потом решил попробовать без классов.

Pavel
08.03.2017
10:17:17

b0g3r
08.03.2017
10:23:59
Естественный процесс обучения

Sergey
08.03.2017
11:49:36
ребят оцените написал с утра https://github.com/heyyyoyy/beginning/blob/master/vk8.03.py

Janek
08.03.2017
11:50:41
круто

stonepig
08.03.2017
11:50:41

Janek
08.03.2017
11:50:46
продолжай в том же духе

Sergey
08.03.2017
11:51:20

stonepig
08.03.2017
11:51:30

Sergey
08.03.2017
11:51:32

stonepig
08.03.2017
11:52:30
https://vk.com/dev/authentication

stonepig
08.03.2017
11:53:16
https://vk.com/dev/auth_direct
во тут!

Anna
08.03.2017
11:53:23
фу


stonepig
08.03.2017
11:53:29
Двухфакторная аутентификация
Если Вы передали в запросе параметр 2fa_supported=1 и у пользователя включена двухфакторная аутентификация, на запрос с верными логином и паролем вернется ошибка need_validation со следующими полями:
validation_type — тип подтверждения. Возможные значения:
2fa_sms — подтверждение через SMS;
2fa_app — подтверждение с помощью приложения для генерации кодов.
phone_mask — маска номера телефона.
Необходимо запросить у пользователя код подтверждения и повторно отправить запрос на авторизацию с дополнительным параметром code, содержащим код подтверждения.
Если возникли проблемы с получением кода из приложения или пользователь не хочет использовать приложение для генерации кодов, Вы можете форсировать получение кода по SMS, повторно передав запрос авторизации с параметром force_sms=1.

Anna
08.03.2017
11:53:52

Sergey
08.03.2017
11:53:52

Google

stonepig
08.03.2017
11:53:56
а могла бы быть!

Anna
08.03.2017
11:54:15
ну, нет

stonepig
08.03.2017
11:54:33
нечего в девках всю жизнь ходить

Sergey
08.03.2017
11:54:47


Dmitry
08.03.2017
12:09:14
Разбираюсь с декораторами. Допустим будет так:
@auth()
def get_data(self):
...
get_data() делает запрос к серверу. Соотв. ей нужен токен. Так как auth() будет выполняться непосредственно перед get_data(), то тогда я не понимаю как можно запихать туда ответ сервера, ведь он будет получен после выполнения тела функции)

Igor
08.03.2017
12:11:18
получается надо запросить у сервера токен, записать в файл, потом из файла его получить)

Ivan
08.03.2017
12:11:24
декоратор это просто функция которой ты передаешь декорируемый объект, в которой ты делаешь что хочешь, но еще внутри можешь использовать этот самый объект.

Igor
08.03.2017
12:11:26
тьфу, промазал

Admin
ERROR: S client not available

Igor
08.03.2017
12:11:36
А правильно ли будет сделать обертку api_call() которая будет принимать функцию на вход и в которой будет храниться токен и если что обовляться?
> в которой будет храниться токен и если что обновляться
декоратор - как раз место, в котором это имело бы смысл делать
как раз потому, что он выполняется перед функцией
т.е. сначала декоратор смотрит, истек ли токен; если истек - создает новый
и уже с валидным токеном идет выполнять функцию, которую он оборачивает
другой вопрос в том, эффективно ли это
тебе посоветовали вместо того, чтобы самому палить каждые 15 минут, что токен не просрочен, палить это в момент попытки апи вызова

Dmitry
08.03.2017
12:13:36
это я уже понял. Просто павел писал, о реализации без проверки времени жизни токена, а просто отправлять запросы пока сервер не скажет, что токен уже не актуален и потом его обновлять

Igor
08.03.2017
12:13:37
если ты будешь юзать декоратор, получится, что отправляются лишние ывзовы, это не круто
ну, можно сделать так
функция будет кидать эксепшн, а декоратор будет ловвить, обновлять токен и перевызывать с нормальным токеном

Google

Igor
08.03.2017
12:14:38
это, наверное, будет наиболее верно
хз че до меня сразу не дошло :)

Dmitry
08.03.2017
12:16:33
типа этого:
def auth():
def check_status():
тут вызовем get_data() и вернем статус
if status...

Igor
08.03.2017
12:17:17
аэы..
ну да, как вариант
только питоничнее эксепшены бросать в случае ошибок

Dmitry
08.03.2017
12:17:51
ok

Igor
08.03.2017
12:18:24
ok
в телеграме, если что, можно нажать "стрелку вверх" на клаве, чтобы быстро отредактировать последнее сообщение )

Dmitry
08.03.2017
12:19:20
буду знать)

Артемий
08.03.2017
12:29:13
Ребят, а есть чатик по django?

Igor
08.03.2017
12:29:37
пиши ему в личку, @django_python
пусть ник оправдывает
(шучу)

Stanislav
08.03.2017
12:29:58

Артемий
08.03.2017
12:30:19
Спс

Dmitry
08.03.2017
12:32:54
может кто знает как поправить?

Igor
08.03.2017
12:33:52
у тебя наверное http:// не указано в переменной
а
нет
Эта группа больше не существует