J'utilise la version Ruby 1.9.3
, j'aime bien obtenir le nom d'hôte à partir de l'URL de la vidéo ci-dessous,
J'ai essayé avec du code
require 'uri'
url = "https://ferrari-view.4me.it/view-share/playerp/?plContext=http://ferrari-%201363948628-stream.4mecloud.it/live/ferrari/ngrp:livegenita/manifest.f4m&cartellaConfig=http://ferrari-4me.weebo.it/static/player/config/&cartellaLingua=http://ferrari-4me.weebo.it/static/player/config/&poster=http://pusher.newvision.it:8080/resources/img1.jpg&urlSkin=http://ferrari-4me.weebo.it/static/player/swf/skin.swf?a=1363014732171&method=GET&target_url=http://ferrari-4me.weebo.it/static/player/swf/player.swf&userLanguage=IT&styleTextColor=#000000&autoPlay=true&bufferTime=2&isLive=true&highlightColor=#eb2323&gaTrackerList=UA-23603234-4"
puts URI.parse(url).Host
il lève une exception URI :: InvalidURIError: mauvais URI (n'est-ce pas un URI?):
J'ai essayé avec encoder l'URL puis analyser comme ci-dessous
puts URI.parse(URI.parse(url)).Host
il jette une exception URI::InvalidURIError: bad URI(is not URI?)
même __
Mais le code ci-dessus fonctionne pour l'URL ci-dessous.
url = http://www.youtube.com/v/GpQDa3PUAbU?version=3&autohide=1&autoplay=1
Comment régler ceci? toute suggestion s'il vous plaît . Merci
Cette URL n'est pas valide, mais elle fonctionne dans le navigateur, car le navigateur lui-même est moins strict en ce qui concerne les caractères spéciaux tels que:, /, etc.
Vous devriez d'abord encoder votre URI
encoded_url = URI.encode(url)
Et puis analysez
URI.parse(encoded_url)
Addressable :: URI est un meilleur remplacement, plus conforme à la RFC:
require "addressable/uri"
Addressable::URI.parse(url).Host
#=> "ferrari-view.4me.it"
gem install addressable
en premier.
essaye ça:
safeurl = URI.encode(url.strip)
response = RestClient.get(safeurl)
uri = URI.parse(URI.encode(url.strip))
URI.parse
a raison: cet URI est illégal. Le simple fait que votre navigateur fonctionne accidentellement ne le rend pas légal. Vous ne pouvez pas analyser cet URI, car il n'est pas un URI.
Votre requête URI n'est pas valide. Il y a plusieurs caractères que vous devriez encoder avec URI::encode()
. Par exemple, #
, ou
&
ne sont pas valides dans une requête.
Ci-dessous une version de travail de votre code
require 'uri'
plContext = URI::encode("http://ferrari-%201363948628-stream.4mecloud.it/live/ferrari/ngrp:livegenita/manifest.f4m")
cartellaConfig = URI::encode("http://ferrari-4me.weebo.it/static/player/config/")
cartellaLingua = URI::encode("http://ferrari-4me.weebo.it/static/player/config/")
poster = URI::encode("http://pusher.newvision.it:8080/resources/img1.jpg")
urlSkin = URI::encode("http://ferrari-4me.weebo.it/static/player/swf/skin.swf?a=1363014732171")
target_url = URI::encode("http://ferrari-4me.weebo.it/static/player/swf/player.swf")
url = "https://ferrari-view.4me.it/view-share/playerp/?"
url << "plContext=#{plContext}"
url << "&cartellaConfig=#{cartellaConfig}"
url << "&cartellaLingua=#{cartellaLingua}"
url << "&poster=#{poster}"
url << "&urlSkin=#{urlSkin}"
url << "&method=GET"
url << "&target_url=#{target_url}"
url << "&userLanguage=IT"
url << "&styleTextColor=#{URI::encode("#000000")}"
url << "&autoPlay=true&bufferTime=2&isLive=true&gaTrackerList=UA-23603234-4"
url << "&highlightColor=#{URI::encode("#eb2323")}"
puts url
puts URI.parse(url).Host