【发布时间】:2016-05-10 11:54:03
【问题描述】:
我想获取 Discogs 版本的图片。我可以在没有 Discogs API 的情况下做到这一点吗? 他们的数据库转储中没有指向图像的链接。
【问题讨论】:
标签: image discogs-api
我想获取 Discogs 版本的图片。我可以在没有 Discogs API 的情况下做到这一点吗? 他们的数据库转储中没有指向图像的链接。
【问题讨论】:
标签: image discogs-api
要在没有 API 的情况下执行此操作,您必须加载网页并从 html 源代码中提取图像。您可以通过加载https://www.discogs.com/release/xxxx 找到相关页面,其中xxxx 是版本号。由于 html 只是一个文本文件,您现在可以提取 jpeg URL。
我不知道你的编程语言是什么,但我确信它可以处理字符串函数,比如indexOf 和subString。您可以提取图片的 html 的 OG:Image 内容。
举个例子:https://www.discogs.com/release/8140515
.indexOf("og:image\" content=\"); 另存为 startPos 到某个整数。.indexOf(".jpg", startPos + 19); 转换为 endPos。现在从 html 文本 img_URL = myHtmlStr.substring(startPos+19, endPos);
您最终应该得到一个如下所示的字符串(提取的 URL):
https://img.discogs.com/_zHBK73yJ5oON197YTDXM7JoBjA=/fit-in/600x600/filters:strip_icc():format(jpeg):mode_rgb():quality(90)/discogs-images/R-8140515-1460073064-5890.jpeg.jpg
这个过程可以缩短为找到https://img.的startPos索引,然后从该startPos索引之后搜索时找到.jpg的第一个匹配项.在该长度范围内提取。这是因为图像 URL 仅在 html 源代码中提及 https://img.
将位于https://www.discogs.com/release/8140515 的页面与下面提取的URL 图像进行比较。
【讨论】:
这是使用 Java 和 Jsoup 库的方法。
<meta property="og:image" content=".." /> 以获取 content 值import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class DiscogRelease {
private final String url;
public DiscogRelease(String url) {
this.url = url;
}
public String getImageUrl() {
try {
Document doc = Jsoup.connect(this.url).get();
Elements metas = doc.head().select("meta[property=\"og:image\"]");
if (!metas.isEmpty()) {
Element element = metas.get(0);
return element.attr("content");
}
} catch (IOException ex) {
Logger.getLogger(DiscogRelease.class.getName()).log(Level.SEVERE, null, ex);
}
return null;
}
}
【讨论】: