Сохранить потоковое аудио с URL-адреса в формате MP3 или даже просто аудиофайл с URL-адреса в формате MP3 - PullRequest
0 голосов
/ 25 февраля 2019

Я пытаюсь, чтобы мой сервер в 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)

Спасибо, Ричард, этот код работает и помогает мне лучше понять это.Любые предложения по улучшению приведенного выше рабочего примера?

...