2017-09-07 6 views
4

Je travaille sur la collecte de fichiers de flux radio Internet tels que m3u avec un lien vers l'intérieur flux (par exemple http://aska.ru-hoster.com:8053/autodj).Python Way pour vérifier que le courant de radio Internet est avaliable/vivre

Je n'ai pas trouvé d'exemple sur la façon dont il est possible de vérifier si le lien est disponible/live. Toute aide est apprécié!

UPD:

Peut-être la principale question devrait ressembler à:

Peut-être un flux cassé? Si oui, le lien pour ce flux sera-t-il toujours disponible ou il y aura simplement une erreur 404 dans le navigateur? Si le lien encore disponible pour ouvrir même le flux est mort, quelles sont les autres méthodes pour vérifier le flux?

+0

Avez-vous du code montrant votre tentative actuelle? Essentiellement, vous n'avez qu'à 'obtenir' le _m3u_, et gérer l'erreur/exception lorsque cela échoue. ... si vous ne parvenez pas à le collecter, ce n'est pas là ... – bryn

+0

@bryn en fait j'écris scrapper pour télécharger tous les fichiers du site Web, mais la question n'est pas liée à la façon de le faire. Ma question est comment vérifier ces fichiers de flux pour déterminer si le flux n'est pas cassé, donc je peux supprimer des fichiers inutiles. Ok, je peux reformuler la tâche: Comment vérifier le lien vers le flux radio internet (http: //aska.ru-hoster.com: 8053/autodj) pour la disponibilité, donc la sortie devrait être comme: 'Stream fonctionne'/'Stream est mort' – Michael

+0

@michael, vérifiez ma réponse et laissez-moi savoir si cela aide. –

Répondre

1

Essayez-vous de vérifier si l'URL de diffusion existe?
Si oui, ce sera comme vérifier n'importe quelle autre URL si elle existe. Un moyen sera d'essayer d'obtenir l'URL en utilisant urllib et de vérifier le code d'état retourné.

200 - Existant
Tout le reste (par exemple 404) -Doesn't existent ou vous ne pouvez pas y accéder.

Par exemple:

import urllib 
url = 'http://aska.ru-hoster.com:8053/autodj' 

code = urllib.urlopen(url).getcode() 
#if code == 200: #Edited per @Brad's comment 
if str(code).startswith('2') or str(code).startswith('3') : 
    print 'Stream is working' 
else: 
    print 'Stream is dead' 

EDIT-1

Tout va attraper ci-dessus si une URL existe ou non. Il ne sera pas intercepté si l'URL existe et que le lien multimédia est rompu.

Une solution possible utilisant vlc consiste à extraire le média de l'url, à essayer de le lire et à obtenir son statut pendant la lecture. Si le média n'existe pas, nous obtiendrons une erreur qui peut être utilisée pour déterminer l'état du lien.

Avec l'URL de travail nous obtenons

url = 'http://aska.ru-hoster.com:8053/autodj' 
>>> 
Stream is working. Current state = State.Playing 

Avec l'URL qui nous obtenons,

url = 'http://aska.ru-hoster.com:8053/autodj12345' 
>>> 
Stream is dead. Current state = State.Error 

Voici la logique de base pour atteindre ci-dessus. Vous voudrez peut-être vérifier VLC site pour attraper d'autres types d'erreurs et de meilleures méthodes.

+0

Ce n'est pas tout à fait exact. Tout code d'état '2xx' est un succès, même si ce n'est pas' 200'. Par exemple, il existe des serveurs de diffusion en continu qui vont renvoyer un «206 contenu partiel». Il vous manque également toutes les formes de redirection '3xx'. Il est très courant d'avoir un flux redirigé vers d'autres serveurs, pour équilibrer la charge. – Brad

+0

Vous avez raison @Brad (Confirmé selon https://en.wikipedia.org/wiki/List_of_HTTP_status_codes). Je n'ai pas regardé plus en profondeur car l'intention n'était pas de fournir une solution complète, mais simplement de l'indiquer. J'ai mis à jour ma réponse qui attrape maintenant les codes '2xx' et' 3xx' comme 'succès'. Merci pour les pointeurs. –