Reputation: 5904
I can parse an href
url just following the documentation:
Document doc = Jsoup.connect("http://jsoup.org").get();
Element link = doc.select("a").first();
String relHref = link.attr("href"); // == "/"
String absHref = link.attr("abs:href"); // "http://jsoup.org/"
but i try to extract a link url from css in this webpage: http://multiplayer.it/notizie/133685-assassins-creed-unity-ecco-come-assassins-creed-unity-sfrutta-lhardware-di-nuova-generazione.html
i need take the link of image banner. The id is: id="content_heading"
but the image is loaded by css.
<div id="content_heading" style="background: url(http://images.multiplayer.it/thumbs/images/2014/06/10/assassins_creed_unity_jpg_1600x0_upscale_q85.jpg) center center; background-size: cover;">
How can i extract the url? this is the Asynktask
private class ContentViewImgUrl extends AsyncTask<String,String,String> {
@Override
protected void onPreExecute()
{
}
@Override
protected String doInBackground(String... params) {
try {
final Document doc = Jsoup.connect(URL).timeout(30000).get();
runOnUiThread(new Runnable() {
@Override
public void run() {
Element rootElement = doc.body().getElementById("top_ads_container");
Elements elements = rootElement.getElementsByTag("header");
for(Element element : elements){
imgUrlPost = element.select("div.content_heading").text();
}
}
});
} catch (Exception e) {
Log.e("ESEMPIO", "ERROR");
}
return null; // MODIFIED HERE
}
@Override
protected void onPostExecute(String result)
{
Toast.makeText(SingleActivity.this, "url "+ imgUrlPost, Toast.LENGTH_SHORT).show();
}
}
The toast not works.. It returns only Url
and nothing else.
Thanks
UDPATE:
private class ContentViewImgUrl extends AsyncTask<Void,Void,Void> {
final Pattern pattern = Pattern.compile("url\\((.+?)\\)");
@Override
protected void onPreExecute() {}
@Override
protected String doInBackground(Void... params) {
try {
final Document doc = Jsoup.connect(URL).timeout(30000).get();
runOnUiThread(new Runnable() {
@Override
public void run() {
String url = doc.getElementById("content_heading").attr("style").toString();
Matcher matcher = pattern.matcher(url);
matcher.find();
System.out.println(matcher.group(1));
}
});
urlnew = new URL(matcher.group(1));
postBitmap = BitmapFactory.decodeStream(urlnew.openConnection().getInputStream());
} catch (Exception e) {
Log.e("ESEMPIO", "ERROR");
}
return null; // MODIFIED HERE
}
@Override
protected void onPostExecute(Void result) {
Toast.makeText(SingleActivity.this, "url "+ urlnew, Toast.LENGTH_SHORT).show();
postImage = (ImageView) findViewById(R.id.postimage);
postImage.setImageBitmap(postBitmap);
}
}
where urlnew
i declared it as public URL urlnew
and postBitmap
as Bitmap
SECOND UDPATE:
private class ContentViewImgUrl extends AsyncTask<Void,Void,Void> {
final Pattern pattern = Pattern.compile("url\\((.+?)\\)");
@Override
protected void onPreExecute() {}
@Override
protected String doInBackground(Void... params) {
try {
final Document doc = Jsoup.connect(URL).timeout(30000).get();
runOnUiThread(new Runnable() {
@Override
public void run() {
String url = doc.getElementById("content_heading").attr("style").toString();
Matcher matcher = pattern.matcher(url);
if(matcher.find()){
System.out.println(matcher.group(1));
indirizzostringaimg = matcher.group(1);
imgloader = ImageLoader.getInstance();
imgloader.init(ImageLoaderConfiguration.createDefault(getActivity()));
System.out.println(urlnew);
} else {
Toast.makeText(getActivity(), "Pic url error", Toast.LENGTH_SHORT).show();
}
}
});
} catch (Exception e) {
Log.e("ESEMPIO", "ERROR");
}
return null; // MODIFIED HERE
}
@Override
protected void onPostExecute(Void result) {
if(matcher.find()){
DisplayImageOptions opt = new DisplayImageOptions.Builder()
.showStubImage(R.drawable.refresh)
.showImageForEmptyUri(R.drawable.refresh)
.cacheInMemory()
.imageScaleType(ImageScaleType.IN_SAMPLE_INT)
.cacheOnDisc()
.build();
imgloader.displayImage(indirizzostringaimg, postimage_main, opt);
} else {
Toast.makeText(getActivity(), "Pic url error", Toast.LENGTH_SHORT).show();
}
}
}
Upvotes: 0
Views: 1358
Reputation: 17745
Here is a complete working example. Get the part that interests you.
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
public class Main {
public static void main(String[] args) {
String html = "<div id=\"content_heading\" style=\"background: url(http://images.multiplayer.it/thumbs/images/2014/06/10/assassins_creed_unity_jpg_1600x0_upscale_q85.jpg) center center; background-size: cover;\"></div>";
final Pattern pattern = Pattern.compile("url\\((.+?)\\)");
try {
Document doc = Jsoup.parse(html);
String url = doc.getElementById("content_heading").attr("style").toString();
Matcher matcher = pattern.matcher(url);
matcher.find();
System.out.println(matcher.group(1));
} catch(Exception e) {
e.printStackTrace();
}
}
}
Update
private class ContentViewImgUrl extends AsyncTask<String,String,String> {
final Pattern pattern = Pattern.compile("url\\((.+?)\\)");
@Override
protected void onPreExecute() {}
@Override
protected String doInBackground(String... params) {
try {
final Document doc = Jsoup.connect(URL).timeout(30000).get();
runOnUiThread(new Runnable() {
@Override
public void run() {
String url = doc.getElementById("content_heading").attr("style").toString();
Matcher matcher = pattern.matcher(url);
matcher.find();
System.out.println(matcher.group(1));
}
});
} catch (Exception e) {
Log.e("ESEMPIO", "ERROR");
}
return null; // MODIFIED HERE
}
@Override
protected void onPostExecute(String result) {
Toast.makeText(SingleActivity.this, "url "+ imgUrlPost, Toast.LENGTH_SHORT).show();
}
}
Upvotes: 2