package com.commafeed.backend.favicon; import javax.inject.Inject; import javax.inject.Singleton; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.select.Elements; import com.commafeed.backend.HttpGetter; import com.commafeed.backend.HttpGetter.HttpResult; @Slf4j @RequiredArgsConstructor(onConstructor = @__({ @Inject })) @Singleton public class YoutubeFaviconFetcher extends AbstractFaviconFetcher { private final HttpGetter getter; @Override public byte[] fetch(String url) { if (!url.toLowerCase().contains("://gdata.youtube.com/")) { return null; } String userName = extractUserName(url); if (userName == null) { return null; } String profileUrl = "https://gdata.youtube.com/feeds/users/" + userName; byte[] bytes = null; String contentType = null; try { log.debug("Getting YouTube user's icon, {}", url); // initial get to translate username to obscure user thumbnail URL HttpResult profileResult = getter.getBinary(profileUrl, TIMEOUT); Document doc = Jsoup.parse(new String(profileResult.getContent()), profileUrl); Elements thumbnails = doc.select("media|thumbnail"); if (thumbnails.isEmpty()) { return null; } String thumbnailUrl = thumbnails.get(0).attr("abs:url"); int thumbnailStart = thumbnailUrl.indexOf("", thumbnailStart); if (thumbnailStart != -1) { thumbnailUrl = thumbnailUrl.substring(thumbnailStart + "