Extraire le contenu de l'URL de la chaîne
Fastidieux pour des raisons de Hpricot, j'ai besoin d'écrire une fonction qui est passé d'une URL, et renvoie l'ensemble du contenu de la page comme une seule chaîne.
Je suis proche. Je sais que j'ai besoin d'utiliser OpenURI, et il devrait ressembler à quelque chose comme ceci:
require 'open-uri'
open(url) {
# do something mysterious here to get page_string
}
puts page_string
Quelqu'un peut-il suggérer ce que je dois ajouter?
Vous devez vous connecter pour publier un commentaire.
La
open
méthode passe unIO
représentation de la ressource à votre bloc quand il rendements. Vous pouvez lire à l'aide de laIO#lire
méthodeVous pouvez faire la même chose sans OpenURI:
Ou, plus succinctement:
Kernel.open
. Voici un article parler de choses dont on doit être conscient lors de l'utilisation d'open-uri. J'ai également venir à travers la méthode des conflits de nommageopen
quand il est utilisé avec d'autres bibliothèques comme bunny gem (qui implémente égalementopen
)Net::HTTP.get(URI.parse('http://www.google.com'))
. Et il ne faut pas faire des choses folles sous le capot.Voir aussi la documentation de IO classe
J'ai également été très confus quoi utiliser pour de meilleures performances et des résultats rapides. J'ai couru un test pour à la fois pour rendre cela plus clair:
Son résultat est:
Je tiens à dire que cela dépend de vos exigences et la façon dont vous voulez traiter.
Afin de rendre le code un peu plus clair, le OpenURI
open
méthode retourne la valeur retournée par le bloc, de sorte que vous pouvez affecteropen
le retour de la valeur de votre variable. Par exemple:ruby -r json -ropen-uri -e 'JSON.parse(open("https://ip-ranges.amazonaws.com/ip-ranges.json") { |io| io.read })["prefixes"].each {|p| puts #{p["ip_prefix"] if p["service"]=="EC2"}; '
ruby -r json -r open-uri -e 'JSON.parse(open("https://ip-ranges.amazonaws.com/ip-ranges.json") { |io| io.read })["prefixes"].each {|p| puts p["ip_prefix"] if p["service"]=="EC2"}; '
Essayer ce qui suit: