Как определить, является ли данная URL-ссылка видео или изображением? - PullRequest
5 голосов
/ 23 января 2009

Я пытаюсь взять указанный URL-адрес, введенный пользователем, и определить, указывает ли этот URL-адрес на изображение или видео.

Пример использования:

Когда пользователь вставляет URL-адрес видео YouTube, при сохранении страницы автоматически отображается встроенный проигрыватель YouTube.

Когда пользователь публикует URL-адрес изображения в Flickr, при сохранении на странице автоматически отображается уменьшенная версия изображения Flickr.

Ответы [ 6 ]

9 голосов
/ 23 января 2009

Вы можете получить URL-адрес и посмотреть тип содержимого из ответа.

Вы можете использовать HTTP-клиент из apache, он помогает вам извлечь содержимое URL-адреса и использовать его для навигации по перенаправлениям. Например, попробуйте получить следующее:

http://www.youtube.com/watch?v=d4LkTstvUL4

Вернет HTML, содержащий видео. Через некоторое время вы обнаружите, что видео здесь:

http://www.youtube.com/v/d4LkTstvUL4

Но если вы загрузите эту страницу, вы получите перенаправление:

HTTP/1.0 302 Redirect
Date: Fri, 23 Jan 2009 02:25:37 GMT
Content-Type: text/plain
Expires: Fri, 23 Jan 2009 02:25:37 GMT
Cache-Control: no-cache
Server: Apache
X-Content-Type-Options: nosniff
Set-Cookie: VISITOR_INFO1_LIVE=sQc75zc-QSU; path=/; domain=.youtube.com; expires=
Set-Cookie: VISITOR_INFO1_LIVE=sQc75zc-QSU; path=/; domain=.youtube.com; expires=
Location: http://www.youtube.com/swf/l.swf?swf=http%3A//s.ytimg.com/yt/swf/cps-vf
L4&rel=1&eurl=&iurl=http%3A//i1.ytimg.com/vi/d4LkTstvUL4/hqdefault.jpg&sk=Z_TM3JF
e_get_video_info=1&load_modules=1

Итак, вам нужно выбрать URL-адрес и изучить его, пока вы не получите окончательный контент

В этом разделе объясняется, как обрабатывать перенаправления.

6 голосов
/ 23 января 2009

Выполните запрос HTTP HEAD, чтобы вы могли просмотреть возвращаемые HTTP-заголовки без предварительной загрузки всего документа. Показывает непрограммный случай под Linux с использованием "curl":

$ curl --head http://stackoverflow.com/Content/Img/stackoverflow-logo-250.png
HTTP/1.1 200 OK
Cache-Control: max-age=28800
Content-Length: 3428
Content-Type: image/png
Last-Modified: Fri, 16 Jan 2009 09:35:30 GMT
Accept-Ranges: bytes
ETag: "98f590c5bd77c91:0"
Server: Microsoft-IIS/7.0
Date: Fri, 23 Jan 2009 03:55:39 GMT

Вы можете увидеть здесь из Content-Type, что это изображение. Вы можете использовать HTTPClient из Apache из Java для выполнения запроса HTTP Head.

Если вы хотите загрузить контент наверняка, просто выполните HTTP GET (используя Httpclient) и используйте тот же заголовок HTTP для определения типа контента.

3 голосов
/ 23 января 2009

Нажмите на ссылку и проверьте заголовок типа контента? Если в результате получается HTML-страница, вы можете найти на странице самое большое изображение или встроенный флэш-файл и выбрать его отображение?

1 голос
/ 17 февраля 2015

Это решение без apache.

HttpURLConnection urlConnection;
String urlString = "http://www.youtube.com/v/oHg5SJYRHA0";
try {
    urlConnection = (HttpURLConnection) new URL(urlString).openConnection();
    urlConnection.setInstanceFollowRedirects(true);
    HttpURLConnection.setFollowRedirects(true);

    int status = urlConnection.getResponseCode();
    if (status >= 300 && status <= 307) {
        urlString = urlConnection.getHeaderField("Location");
        urlConnection = (HttpURLConnection) new URL(urlString).openConnection();
        System.out.println("Redirect to URL : " + urlString);
    }
    String contentType = urlConnection.getHeaderField("Content-Type");
    if (contentType.startsWith("image/")) {
        //do something with an image
    } else if (contentType.equals("application/x-shockwave-flash")) {
        //do something with a video
        //} else ...
    }
    System.out.println(contentType);
} catch (IOException e) {
    e.printStackTrace();
}

Следуйте примеру перенаправления с mkyong.com

0 голосов
/ 03 августа 2009

Быстрый индексатор видео - это программа для захвата видео, которая может автоматически захватывать видеокадры из списка видео и создавать индексные веб-страницы, индексные изображения или список изображений.

0 голосов
/ 19 июня 2009

Я предлагаю использовать curl с заголовком диапазона, чтобы вы могли проверить сам тип файла.

curl -s -v -r0-499 -o test  http://stackoverflow.com/content/img/so/logo.png
* About to connect() to stackoverflow.com port 80 (#0)
*   Trying 69.59.196.211... connected
* Connected to stackoverflow.com (69.59.196.211) port 80 (#0)
> GET /content/img/so/logo.png HTTP/1.1
> Range: bytes=0-499
> User-Agent: curl/7.19.4 (i386-apple-darwin9.6.0) libcurl/7.19.4 zlib/1.2.3
> Host: stackoverflow.com
> Accept: */*
> 
< HTTP/1.1 206 Partial Content
< Cache-Control: max-age=604800
< Content-Type: image/png
< Content-Range: bytes 0-499/3438
< Last-Modified: Fri, 05 Jun 2009 06:52:35 GMT
< Accept-Ranges: bytes
< ETag: "25dd4b35aae5c91:0"
< Server: Microsoft-IIS/7.0
< Date: Fri, 19 Jun 2009 19:39:43 GMT
< Content-Length: 500
< 
{ [data not shown]
* Connection #0 to host stackoverflow.com left intact
* Closing connection #0

Затем выполните:

$ file test
test: PNG image data, 250 x 61, 8-bit colormap, non-interlaced

Теперь вы знаете тип MIME: image / png , размер файла 3438 байт , и файл представляет собой 250 x 61 цветное изображение PNG .

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