Atlas91
Atlas91

Reputation: 5904

Parsing jsoup url android

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

Answers (1)

Alkis Kalogeris
Alkis Kalogeris

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

Related Questions