PHP: How to check whether the URL is Youtube's or vimeo's

后端 未结 8 1786
感情败类
感情败类 2021-02-02 01:19

How can I write a function to check whether the provided URLs is youtube or vimeo?

For instance, I have this two URLs that I store in a database as strings,



        
相关标签:
8条回答
  • 2021-02-02 01:36

    Surprising no one has mentioned that youtube urls can also contain the domain 'youtu.be' in which case all of the above solutions would have to be adapted to cater for that eventuality.

    0 讨论(0)
  • 2021-02-02 01:38

    I recently wrote this function to do exactly this, hopefully it's useful to someone:

        /**
     * [determineVideoUrlType used to determine what kind of url is being submitted here]
     * @param  string $url either a YouTube or Vimeo URL string
     * @return array will return either "youtube","vimeo" or "none" and also the video id from the url
     */
    
    public function determineVideoUrlType($url) {
    
    
        $yt_rx = '/^((?:https?:)?\/\/)?((?:www|m)\.)?((?:youtube\.com|youtu.be))(\/(?:[\w\-]+\?v=|embed\/|v\/)?)([\w\-]+)(\S+)?$/';
        $has_match_youtube = preg_match($yt_rx, $url, $yt_matches);
    
    
        $vm_rx = '/(https?:\/\/)?(www\.)?(player\.)?vimeo\.com\/([a-z]*\/)*([‌​0-9]{6,11})[?]?.*/';
        $has_match_vimeo = preg_match($vm_rx, $url, $vm_matches);
    
    
        //Then we want the video id which is:
        if($has_match_youtube) {
            $video_id = $yt_matches[5]; 
            $type = 'youtube';
        }
        elseif($has_match_vimeo) {
            $video_id = $vm_matches[5];
            $type = 'vimeo';
        }
        else {
            $video_id = 0;
            $type = 'none';
        }
    
    
        $data['video_id'] = $video_id;
        $data['video_type'] = $type;
    
        return $data;
    
    }
    
    0 讨论(0)
  • 2021-02-02 01:39

    You can try my solution:

    function checkServer( $domains=array(), $url ) {
        foreach ( $domains as $domain ) {
            if ( strpos($url, $domain ) > 0) {
                return true;
            } else {
                return false;
            }
        }
    }
    

    Use:

    if( checkServer(array("youtube.com","youtu.be"), $url ) ) {
        //is Youtube url
    }
    elseif( checkServer(array("vimeo.com"), $url ) ) {
        //is Vimeo
    }
    elseif ( checkServer(array("any domain"), $url ) ) {
        //is Any Domain
    }else {
        //unknow domain
    }
    
    0 讨论(0)
  • 2021-02-02 01:43

    You can use preg_match():

    $u1="http://vimeo.com/24456787";
    $u2="http://www.youtube.com/watch?v=rj18UQjPpGA&feature=player_embedded";
    
    if(preg_match('/http:\/\/(www\.)*vimeo\.com\/.*/',$u1)){
        // do vimeo stuff
        echo "Vimeo URL found!\n";
    }
    
    if(preg_match('/http:\/\/(www\.)*youtube\.com\/.*/',$u2)){
        // do youtube stuff
        echo "YouTube URL found!\n";
    }
    
    0 讨论(0)
  • 2021-02-02 01:49

    Use the parse_url function to split the URL up and then just do your normal checks

    $url = 'http://www.youtube.com/watch?v=rj18UQjPpGA&feature=player_embedded';
    $parsed = parse_url($url);
    

    Will give you this array

    array
      'scheme' => string 'http' (length=4)
      'host' => string 'www.youtube.com' (length=15)
      'path' => string '/watch' (length=6)
      'query' => string 'v=rj18UQjPpGA&feature=player_embedded' (length=37)
    
    0 讨论(0)
  • 2021-02-02 01:50

    Use regular expressions. What language are you using?

    Edit: noticed your tag was php. It would be something like this:

    <?php
    // get host name from URL
    preg_match('@^(?:http://)?([^/]+)@i',
        "http://www.youtube.com/index.html", $matches);
    $host = $matches[1];
    
    // get last two segments of host name
    preg_match('/[^.]+\.[^.]+$/', $host, $matches);
    echo {$matches[0]}\n"; //youtube.com
    ?>
    
    0 讨论(0)
提交回复
热议问题