Нужна помощь с webglazok.com

Тема в разделе "WASM.NETWORKS", создана пользователем Stariy, 29 июл 2020.

  1. Stariy

    Stariy Member

    Публикаций:
    0
    Регистрация:
    22 окт 2003
    Сообщения:
    529
    Адрес:
    Russia
    Пытаюсь сделать скрипт для ежедневного автоматизированного скачивания видео и таймлапса с данного сервиса.
    Сайт https://webglazok.com/my
    логин demo@webglazok.com
    пароль demo
    Скрипт делаю на питоне, он вроде бы логинится, выводит список камер, привязанных к аккаунту, выводит их параметры, но при попытке скачивания таймлапса скачивает коротенькое видео с надписью "Необходима авторизация". Посоветуйте, что я делаю не так?
    ВОт скрипт:
    Код (Text):
    1. import requests
    2. import json
    3.  
    4. r = requests.post('https://webglazok.com/api/login', data = {'login':'demo@webglazok.com','password':'demo' })
    5. data =r.json()
    6. print(data)
    7. sessionid=data["wgsession"]
    8. tokenid=data["wgtoken"]
    9.  
    10. print("wgsession: "+sessionid)
    11. print("wgtoken: "+tokenid)
    12.  
    13. r = requests.get('https://webglazok.com/api/device',headers={'wgtoken': tokenid})
    14. devices = r.json()
    15.  
    16. for device in devices:
    17. device_id = device["id"]
    18. print(device["name"]+" "+str(device_id)+" "+device["host"])
    19. r = requests.get('[URL]https://'+device[/URL]["host"]+'/api/timelapse', data = { 'dev_id':device_id, 'session':sessionid, 'timestamp_from':'1595869080', 'timestamp_to':'1595955547', 'hour_from':'9', 'hour_to':'18', 'interval':'0', 'download_id':'vwf65ahhzv0i3uxv', 'save':'1'},headers={'wgtoken': tokenid})
    20.  
    21. with open('gggggggg.mp4', 'wb') as fd:
    22. for chunk in r.iter_content(chunk_size=128):
    23. fd.write(chunk)
     
  2. sl0n

    sl0n Мамонт дзена **

    Публикаций:
    0
    Регистрация:
    26 сен 2003
    Сообщения:
    684
    Тыкну пальцем в небо , куки не забыл ? узер агента подменил ?
     
  3. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.241
    Напиши им в саппорт, тут надо ихнее апи знать, а тут вряд ли кто-то такой найдется.
     
  4. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.954
    Я бы посоветовал копнуть в сторону ole-автоматизации браузеров (в хроме и файрфоксе она точно есть) и делать подобные штуки через нее.
     
  5. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.241
    Нук-нук? Я думал, что только осел поддерживает автоматизацию через COM.
    --- Сообщение объединено, 29 июл 2020 ---
    Зачем, если у сайта есть апи?
     
  6. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.954
    Сегодня этот сайт, завтра другой - апи могут быть разными, а через браузер универсальный подход.
     
  7. Stariy

    Stariy Member

    Публикаций:
    0
    Регистрация:
    22 окт 2003
    Сообщения:
    529
    Адрес:
    Russia
    Два раза ткнул и оба раза попал:) ничего этого не сделал, вечером исправлюсь.
    --- Сообщение объединено, 29 июл 2020 ---
    Selenium?
     
  8. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.241
    Сегодня кука может иметь одно название, завтра другое. Сегодня интерфейс сайта может иметь один вид, завтра другой. Это абсолютно одно и тоже.
     
  9. Stariy

    Stariy Member

    Публикаций:
    0
    Регистрация:
    22 окт 2003
    Сообщения:
    529
    Адрес:
    Russia
    и куки сделал и юзерагента тоже. Ни фига. Кстати, судя по трафику с fiddlera, куки не используются, если я правильно понял.
    Сейчас скрипт такой:
    Код (Text):
    1. import requests
    2. import json
    3.  
    4. r = requests.post('https://webglazok.com/api/login', data={'login': 'demo@webglazok.com', 'password': 'demo'})
    5. data = r.json()
    6. print(data)
    7. sessionid = data["wgsession"]
    8. tokenid = data["wgtoken"]
    9. cook = r.cookies
    10. print("wgsession: " + sessionid)
    11. print("wgtoken: " + tokenid)
    12.  
    13. r = requests.get('https://webglazok.com/api/device', headers={'wgtoken': tokenid, 'User-Agent':'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2224.3 Safari/537.36'}, cookies = cook)
    14. devices = r.json()
    15.  
    16. for device in devices:
    17. # print(device)
    18. device_id = device["id"]
    19. print(device["name"] + " " + str(device_id) + " " + device["host"])
    20.  
    21. r = requests.get('https://' + device["host"] + '/api/timelapse',
    22. data={'dev_id': device_id, 'session': sessionid, 'timestamp_from': '1595869080',
    23. 'timestamp_to': '1595955547', 'hour_from': '9', 'hour_to': '18', 'interval': '0',
    24. 'download_id': 'vwf65ahhzv0i3uxv', 'save': '1'}, headers={'wgtoken': tokenid, 'User-Agent':'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2224.3 Safari/537.36'}, cookies = cook)
    25.  
    26. with open(device["name"]+'.mp4', 'wb') as fd:
    27. for chunk in r.iter_content(chunk_size=128):
    28. fd.write(chunk)
     
  10. q2e74

    q2e74 Active Member

    Публикаций:
    0
    Регистрация:
    18 окт 2018
    Сообщения:
    988
    может есть смысл wireshark поставить и посмотреть что реально передается? можно плагин seleniuma в браузер кинуть и записать обращение, посмотреть, как оно отработает или нет спустя скажем 10-15 минут. Таймстэмп в нужном формате уходит?
     
  11. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.954
    https
     
  12. q2e74

    q2e74 Active Member

    Публикаций:
    0
    Регистрация:
    18 окт 2018
    Сообщения:
    988
    f13nd, так там разве агент какой ставиться? стандартная браузерная фигня, ваершарк при скармливании сертификата все прекрасно видит. Ваершарк давно всё умеет. Preference → Protocol → SSL или TLS
    ссылок по этому добру от хабра до ютуба
     
  13. Stariy

    Stariy Member

    Публикаций:
    0
    Регистрация:
    22 окт 2003
    Сообщения:
    529
    Адрес:
    Russia
    спасибо, буду пробовать.
     
  14. Stariy

    Stariy Member

    Публикаций:
    0
    Регистрация:
    22 окт 2003
    Сообщения:
    529
    Адрес:
    Russia
    Смотрел трафик fiddler-ом и wireshark-ом. Также пробовал в хроме через режим разработчика смотреть, что генерируют скрипты и какой запрос в итоге получается. Также там и заголовки видно. Повторил все в скрипте - результат тот же самый. С виду все идеально, но что-то видимо не так.
     
  15. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.241
    И куки, и юзер агента повторил?
     
  16. Stariy

    Stariy Member

    Публикаций:
    0
    Регистрация:
    22 окт 2003
    Сообщения:
    529
    Адрес:
    Russia
    куков не вижу в трафике, а юзерагента да.
    Код (Text):
    1. import time
    2. import requests
    3.  
    4. url = 'https://webglazok.com'
    5. user_agent_val = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36'
    6. session = requests.Session()
    7. r = session.get(url, headers={'User-Agent': user_agent_val})
    8. session.headers.update({'Referer': url})
    9. session.headers.update({'User-Agent': user_agent_val})
    10.  
    11. r = session.post(url + '/api/login', data={'login': 'demo@webglazok.com', 'password': 'demo'})
    12. data = r.json()
    13. print(data)
    14. sessionid = data["wgsession"]
    15. tokenid = data["wgtoken"]
    16.  
    17. r = session.get(url + '/api/device', headers={'wgtoken': tokenid, 'User-Agent': user_agent_val})
    18. devices = r.json()
    19.  
    20. for device in devices:
    21.  
    22.     device_id = device["id"]
    23.     print(device["name"] + " " + str(device_id) + " " + device["host"])
    24.     r = session.get('https://' + device["host"] + '/api/timelapse',
    25.                     data={'dev_id': device_id, 'session': sessionid, 'timestamp_from': time.time() - 60 * 60 * 1,
    26.                           'timestamp_to': time.time(), 'hour_from': '9', 'hour_to': '18', 'interval': '0',
    27.                           'download_id': 'vwf65ahhzv0i3uxv', 'save': '1'},
    28.                     headers={'wgtoken': tokenid, 'User-Agent': user_agent_val})
    29.     with open(device["name"] + str(time.time()) + '.mp4', 'wb') as fd:
    30.         for chunk in r.iter_content(chunk_size=128):
    31.             fd.write(chunk)