nnikolyaa
@nnikolyaa

Как сделать парсинг с вводом url и скачиванием файла?

У меня есть парсер Steam Workshop который выводит url-ы построек. Но я не знаю как сделать парсинг https://steamworkshopdownloader.io/ чтобы ввести url и скачать. Возможно в selenium или requests это можно, подскажите пожалуйста как.
  • Вопрос задан
  • 129 просмотров
Пригласить эксперта
Ответы на вопрос 1
hottabxp
@hottabxp Куратор тега Python
Сначала мы жили бедно, а потом нас обокрали..
1) Отправляем post запрос по адресу
https://node03.steamworkshopdownloader.io/prod/api/download/request
со следующими данными
{"publishedFileId":207294,"collectionId":null,"hidden":false,"downloadFormat":"raw","autodownload":false}
, заменяем цифры на нужный id файла.
2) Получаем в ответ json и берем из него uuid.
3) Формируем следующий json {"uuids":["3a5a8952-7acb-4db2-b99d-ae876e74d79a"]}, только uuid подставляем из предыдущего ответа.
4) Обязательно делаем задержку в одну секунду, иначе на второй запрос в json будет пустой путь к файлу!
5) Сформированный нами json отправляем post запросом на адрес -
https://node03.steamworkshopdownloader.io/prod/api/download/status)

В ответ нам придет примерно следующий json:
{'00e3e77d-9a4b-47da-b71f-d8046b65e5dd': {'age': 54, 'status': 'prepared', 'progress': 100, 'progressText': 'prepared!', 
# 'downloadError': '', 'bytes_size': 0, 'bytes_transmitted': 0, 'storageNode': 'node03.steamworkshopdownloader.io', 'storagePath':
#  '255710/2072941533/1588352120/2072941533_half_timbered_lr_02.raw.download.zip'}}
Нам нужно выдрать storagePath для формирования прямой ссылки на файл.
6) Формируем ссылку следующем образом:
https://node03.steamworkshopdownloader.io/prod//storage/+storagePath+?uuid=+uuid
Должна получится примерно следующая ссылка:
https://node03.steamworkshopdownloader.io/prod//storage/12120/207294/1334251520/207294_.raw.download.zip?uuid=bc8ec71a-f8c9-4107-a6a6-a5e1b3106044

Это и есть прямая ссылка на файл.
Вот код:
def get_file_url(id):
    headers = {'user-agent': 'Hacked_By_HottabXP'}

    data = '{"publishedFileId":'+id+',"collectionId":null,"hidden":false,"downloadFormat":"raw","autodownload":false}'

    response = requests.post('https://node03.steamworkshopdownloader.io/prod/api/download/request', headers=headers, data=data)

    uuid = response.json()['uuid'] 
    data2 = json.dumps({"uuids":[uuid]})
    time.sleep(1)
    # print(response.json())
    response = requests.post('https://node03.steamworkshopdownloader.io/prod/api/download/status', headers=headers, data=data2)

    # print(response.json())
    storagePath = response.json()[uuid]['storagePath']
    # print(storagePath)
    url = 'https://node03.steamworkshopdownloader.io/prod//storage/'+storagePath+'?uuid='+uuid

    return url

url = get_file_url("2072949")

print(url)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы