我正在尝试获取用户输入的给定网址,并确定该网址是指向图片还是视频。
示例用例:
当用户粘贴YouTube视频的网址时,在保存页面时会自动显示嵌入的YouTube播放器。
当用户在Flickr中发布图片的网址时,在保存时,该页面将自动显示较小版本的Flickr图片。
答案 0 :(得分:9)
您可以从响应中获取URL并查看Content-type。
您可以使用apache中的HTTP Client,它可以帮助您获取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并检查它,直到获得最终内容
This section解释了如何处理重定向。
答案 1 :(得分:6)
发出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中看到这是一张图片。您可以使用Java中的HTTPClient from Apache来执行HTTP头请求。
如果您想要下载内容,请发布HTTP GET(使用Httpclient)并使用相同的HTTP标头来确定内容类型。
答案 2 :(得分:3)
点击链接并检查内容类型标题?如果结果是HTML页面,您可以在页面上查找最大的图像或嵌入式Flash文件并选择显示该文件吗?
答案 3 :(得分:1)
这是一个没有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();
}
答案 4 :(得分:0)
我建议使用带有范围标题的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 图像。
答案 5 :(得分:0)
快速视频索引器是一种视频捕获软件,可以从视频列表中自动捕获视频帧,并创建索引网页,索引图片或图像列表。