Я пытаюсь, чтобы мой сервер в Python 3 перехватывал файлы с URL.В частности, я хотел бы передать URL-адрес в функцию, я бы хотел, чтобы функция позволяла захватить аудиофайл (разных форматов) и сохранить его в формате MP3, возможно, используя ffmpeg или ffmpy.Если в URL также есть PDF, я бы хотел сохранить его в формате PDF.Я еще мало исследовал PDF, но я работал над аудио-частью и не был уверен, возможно ли это вообще.
Я рассмотрел несколько вопросов здесь, но наиболее заметно; Как мне загрузить файл по HTTP, используя Python?
Это немного устарело, но я пробовал несколько способов и всегда получал какую-то проблему.Я пытался использовать библиотеку запросов, urllib, streamripper и, возможно, еще одну.
Есть ли способ сделать это и с рекомендуемой библиотекой?
Например, большинство из тех, которые япопытался сохранить что-нибудь, например HTML-страницу, или пустой файл с именем file.mp3 в этом случае.
Streamripper получил попытку изменить ошибку пользовательских агентов.
Я не уверен, возможно ли это, но я уверен, что здесь есть кое-что, чего я не понимаю, может кто-то указать мне направильное направление?
Это не обязательно код, который я пытаюсь использовать, просто пример того, что я использовал, который не работает.
import requests
url = "http://someurl.com/webcast/something"
r = requests.get(url)
with open('file.mp3', 'wb') as f:
f.write(r.content)
# Retrieve HTTP meta-data
print(r.status_code)
print(r.headers['content-type'])
print(r.encoding)
** Редактировать
import requests
import ffmpy
import datetime
import os
## THIS SCRIPT CAN BE PASSED A URL AND IF THE URL RETURNS
## HTTP HEADER FOR CONTENT TYPE AUDIO/MPEG, THE FILE WILL
## BE SAVED AS THE CURRENT-DATE-AND-TIME.MP3
##
## THIS SCRIPT CAN BE PASSED A URL AND IF THE URL RETURNS
## HTTP HEADER FOR CONTENT TYPE application/pdf, THE FILE WILL
## BE SAVED AS THE CURRENT-DATE-AND-TIME.PDF
##
## THIS SCRIPT CAN BE PASSED A URL AND IF THE URL RETURNS
## HTTP HEADER FOR CONTENT TYPE other than application/pdf, OR
## audio/mpeg, THE FILE WILL NOT BE SAVED
def BordersPythonDownloader(url):
print('Beginning file download requests')
r = requests.get(url, stream=True)
contype = r.headers['content-type']
if contype == "audio/mpeg":
print("audio file")
filename = '[{}].mp3'.format(str(datetime.datetime.now()))
with open('file.mp3', 'wb+') as f:
f.write(r.content)
ff = ffmpy.FFmpeg(
inputs={'file.mp3': None},
outputs={filename: None}
)
ff.run()
if os.path.exists('file.mp3'):
os.remove('file.mp3')
elif contype == "application/pdf":
print("pdf file")
filename = '[{}].pdf'.format(str(datetime.datetime.now()))
with open(filename, 'wb+') as f:
f.write(r.content)
else:
print("URL DID NOT RETURN AN AUDIO OR PDF FILE, IT RETURNED {}".format(contype))
# INSERT YOUR URL FOR TESTING
# OR CALL THIS SCRIPT FROM ELSEWHERE, PASSING IT THE URL
#DEFINE YOUR URL
#url = 'http://archive.org/download/testmp3testfile/mpthreetest.mp3'
#CALL THE SCRIPT; PASSING IT YOUR URL
#x = BordersPythonDownloader(url)
#ANOTHER EXAMPLE WITH A PDF
#url = 'https://www.cisco.com/c/en/us/td/docs/switches/lan/catalyst6500/ios/12-2SY/configuration/guide/sy_swcg/etherchannel.pdf'
#x = BordersPythonDownloader(url)
Спасибо, Ричард, этот код работает и помогает мне лучше понять это.Любые предложения по улучшению приведенного выше рабочего примера?