2013-06-14 4 views
2

Je html comme celui-ciGet youtube video id du code html

<iframe width="560" height="315" src="http://www.youtube.com/embed/Wa6CA3YqV2Q" frameborder="0" allowfullscreen></iframe> 

Comment puis-je obtenir la vidéo id Wa6CA3YqV2Q avec regex? Et y a-t-il d'autres moyens d'y parvenir? J'ai utilisé Nokogiri, et j'ai réussi à obtenir http://www.youtube.com/embed/Wa6CA3YqV2Q, alors comment puis-je obtenir id, de la vidéo ayant ce lien?

+0

lire http://stackoverflow.com/questions/1773822/get-youtube-video-id-from-html-code-with-php?rq=1 et http://stackoverflow.com/questions/8041352/ extraire-et-remplacer-youtube-seulement-iframe-src? rq = 1 espérons que cela vous aidera. –

Répondre

1

terminé avec la suite

string = 'http://www.youtube.com/embed/Wa6CA3YqV2Q' 

result = string.split('/').last 
0

vous pouvez utiliser

string.scan(/src="\S+\/(\w+)"/)[0][0] 

mais si vous faites beaucoup de travail html je recommande d'utiliser un analyseur complet sur le HTML comme Nokogiri ou quelque chose peut-être plus léger.

0

Alors que vous pourriez être en mesure de l'analyser avec une expression rationnelle, l'analyse de html arbitraire avec regexs est mauvaise, sauf si vous savez vraiment ce que vous faites. Il y a beaucoup de controverse historique autour du sujet, cherchez à ce sujet si vous êtes intéressé.

La bonne façon est d'analyser le document, il y a un grand analyseur pour rails:

http://nokogiri.org/

+0

utilisé nokogiri, obtenu le lien, maintenant besoin d'obtenir tous les symboles après la dernière '/' – Avdept

+0

Parce que les URL de Youtube peuvent varier beaucoup, ce n'est pas facile. Vérifiez les autres questions répondues comme: http://stackoverflow.com/questions/2936467/parse-youtube-video-id-using-preg-match/6382259#6382259 http://stackoverflow.com/questions/6556772/parsing-youtube-url – bluehallu

0

Essayez ceci:

string = 'http://www.youtube.com/embed/Wa6CA3YqV2Q' 
regex = /^(?:https?:\/\/)?(?:www\.)?\w*\.\w*\/(?:watch\?v=)?((?:p\/)?[\w\-]+)/ 
match = string.match(regex) 
if match 
    return match[1] 
end 
return '' 

I A obtenu à partir d'ici et l'a changé un peu: Parsing youtube url

3

Le code ci-dessous prendra n'importe quelle URL vimeo ou youtube et renverra l'identifiant vidéo et le fournisseur.

Dans votre modèle

def parse_video_url(url) 
    @url = url 

    youtube_formats = [ 
     %r(https?://youtu\.be/(.+)), 
     %r(https?://www\.youtube\.com/watch\?v=(.*?)(&|#|$)), 
     %r(https?://www\.youtube\.com/embed/(.*?)(\?|$)), 
     %r(https?://www\.youtube\.com/v/(.*?)(#|\?|$)), 
     %r(https?://www\.youtube\.com/user/.*?#\w/\w/\w/\w/(.+)\b) 
     ] 

    vimeo_formats = [%r(https?://vimeo.com\/(\d+)), %r(https?:\/\/(www\.)?vimeo.com\/(\d+))] 

    @url.strip! 

    if @url.include? "youtu" 
     youtube_formats.find { |format| @url =~ format } and $1 
     @results = {provider: "youtube", id: $1} 
     @results 
    elsif @url.include? "vimeo" 
     vimeo_formats.find { |format| @url =~ format } and $1 
     @results = {provider: "vimeo", id: $1} 
     @results 
    else 
     return nil # There should probably be some error message here 
    end 
end 

Ensuite, dans votre contrôleur il suffit d'appeler:

@results = @course.parse_video_url(@course.video_url) 
# Access the hash with @results[:provider] or @results [:id] 

Et, selon vous, vous pouvez écrire une instruction IF pour afficher le code embed pertinent pour le fournisseur/id combo .