Получение идентификатора видео с YouTube с использованием подстрок - PullRequest
2 голосов
/ 26 октября 2011

В настоящее время я пытаюсь извлечь идентификатор видео YouTube из URL-адреса для встраивания, предоставляемого YouTube.

В настоящее время я использую это в качестве примера:

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

Пока мой кодв настоящее время выглядит так:

 else if (TB_VideoLink.Text.Trim().Contains("http://www.youtube.com/embed/"))
        {
            youtube_url = TB_VideoLink.Text.Trim();
            int Count  = youtube_url.IndexOf("/embed/", 7);
            string cutid = youtube_url.Substring(Count,youtube_url.IndexOf("\" frameborder"));

            LB_VideoCodeLink.Text = cutid;
        }

Кажется, я туда попал, но код падает на CutID, и я не уверен, почему ???

Cheers

Ответы [ 3 ]

7 голосов
/ 26 октября 2011

Мне всегда проще использовать регулярные выражения для такого рода вещей, Substring и IndexOf всегда кажутся мне устаревшими, но это только мое личное мнение.

Вот как бы я это сделалрешить эту проблему.

Regex regexPattern = new Regex(@"src=\""\S+/embed/(?<videoId>\w+)");
Match videoIdMatch = regexPattern.Match(TB_VideoLink.Text);

if (videoIdMatch.Success)
{
    LB_VideoCodeLink.Text = videoIdMatch.Groups["videoId"].Value;
}

Это выполнит сопоставление с регулярным выражением, найдя src = ", игнорируя все символы до / embed /, затем извлекая все символы слова после него как именованную группу.

После этого вы можете получить значение этой именованной группы. Преимущество в том, что это будет работать, даже если frameborder не появляется непосредственно после src.

Надеюсь, это полезно,

Люк

2 голосов
/ 26 октября 2011

Вторым параметром метода Substring является длина, а не второй индекс.Вычтите индекс второго теста из первого, чтобы получить требуемую длину.

else if (TB_VideoLink.Text.Trim().Contains("http://www.youtube.com/embed/"))
    {
        youtube_url = TB_VideoLink.Text.Trim();
        // Find the start of the embed code
        int Count  = youtube_url.IndexOf("/embed/", 7);
        // From the start of the embed bit, search for the next "
        int endIndex = youtube_url.IndexOf("\"", Count);
        // The ID is from the 'Count' variable, for the next (endIndex-Count) characters
        string cutid = youtube_url.Substring(Count, endIndex - Count);

        LB_VideoCodeLink.Text = cutid;
    }

Возможно, вам понадобится еще немного обработать исключение, если одна из двух тестовых строк не существует.

0 голосов
/ 26 октября 2011

Аналогично ответу выше, но его избили .. дох

            //Regex with YouTube Url and Group () any Word character a-z0-9 and expect 1 or more characters +
        var youTubeIdRegex = new Regex(@"http://www.youtube.com/embed/(?<videoId>\w+)",RegexOptions.IgnoreCase|RegexOptions.Compiled);

        var youTubeUrl = TB_VideoLink.Text.Trim();

        var match = youTubeIdRegex.Match(youTubeUrl);
        var youTubeId = match.Groups["videoId"].Value; //Group[1] is (\w+) -- first group ()

        LB_VideoCodeLink.Text = youTubeId;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...