Menü

Android HTML Parser (Jsoup)

14 Mayıs 2015 - Android & IOS

Merhaba arkadaşlar bir ay kadar önce üzerine çalıştığım ve bazı işlerin araya girmesiyle halledemediğim bir işti. Aklıma takılmıştı. Sayın arkadaşım Figen Önün’ün de ısrarlarıyla yaptığım HTML Parser örneğini anlatacağım. Örneği Android Studio üzerinde gerçekleştirmekteyim. Jsoup kütüphanesini kullandım.

Jsoup kütüphanesini buradan  indirebilirsiniz.

Jsoup kütüphanesini android studio projesine eklemek için; build.gradle’ı açıp jsoup-1.8.2.jar dosyasını göstermelisiniz. Dependencies altında tanımlanmış olmalıdır.

jsouplib

 

Bunu yaptıktan sonra da projeyi bir defa çalıştırmanız iyi olacaktır. Proje derleneceği için kütüphaneyi projeye eklemiş olacaksınız. Run etmediğim zaman jsoup bileşenlerini kullanırken hata aldım. Run ettiğimde hata düzelmişti.

MainActivity.xml görünüm dosyamıza bakacak olursak;

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">

    <TextView android:text="@string/hello_world" android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/textView" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Title"
        android:id="@+id/button"
        android:layout_below="@+id/imageView"
        android:layout_centerHorizontal="true" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Meta"
        android:id="@+id/button2"
        android:layout_below="@+id/button"
        android:layout_centerHorizontal="true" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Logo"
        android:id="@+id/button3"
        android:layout_below="@+id/button2"
        android:layout_toRightOf="@+id/imageView"
        android:layout_toEndOf="@+id/imageView" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="Large Text"
        android:id="@+id/textView2"
        android:layout_below="@+id/textView"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/imageView"
        android:layout_below="@+id/textView2"
        android:layout_alignLeft="@+id/button"
        android:layout_alignStart="@+id/button" />

</RelativeLayout>

 

MainActivity.java 

package eren.html_parse;
/*Importlar*/
import android.app.ProgressDialog;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
import java.io.IOException;
import java.io.InputStream;


public class MainActivity extends ActionBarActivity {

    // URL Adresi
    String url = "http://www.erencolak.com";
    ProgressDialog mProgressDialog;
    Button title,desc,logo;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        title=(Button)findViewById(R.id.button);
        desc=(Button)findViewById(R.id.button2);
        logo=(Button)findViewById(R.id.button3);
        // Button click olayları
        title.setOnClickListener(new View.OnClickListener() {
            public void onClick(View arg0) {
                // Execute Title AsyncTask
                new Title().execute();
            }
        });
        desc.setOnClickListener(new View.OnClickListener() {
            public void onClick(View arg0) {
                // Execute Description AsyncTask
                new Description().execute();
            }
        });
        logo.setOnClickListener(new View.OnClickListener() {
            public void onClick(View arg0) {
                // Execute Logo AsyncTask
                new Logo().execute();
            }
        });

    }
    // Title bilgisinin çekilmesi için gerekli kodlar
    private class Title extends AsyncTask<Void, Void, Void> {
        String title;

        @Override
        protected void onPreExecute() {
            /*İşlem süresinde progressdialog gösterilir.*/
            super.onPreExecute();
            mProgressDialog = new ProgressDialog(MainActivity.this);
            mProgressDialog.setTitle("Eren");
            mProgressDialog.setMessage("Yükleniyor...");
            mProgressDialog.setIndeterminate(false);
            mProgressDialog.show();
        }

        @Override
        protected Void doInBackground(Void... params) {
            try {
                // Web sitesine bağlan
                Document document = Jsoup.connect(url).get();
                // Html title nesnesine ulaş ve al
                title = document.title();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            // TextView'a title'ı yaz
            TextView txttitle = (TextView) findViewById(R.id.textView2);
            txttitle.setText(title);
            mProgressDialog.dismiss();
        }


}
    // Meta Description'a erişmek
    private class Description extends AsyncTask<Void, Void, Void> {
        String desc;

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            mProgressDialog = new ProgressDialog(MainActivity.this);
            mProgressDialog.setTitle("Eren");
            mProgressDialog.setMessage("Yükleniyor...");
            mProgressDialog.setIndeterminate(false);
            mProgressDialog.show();
        }

        @Override
        protected Void doInBackground(Void... params) {
            try {
                // Web sitesine bağlan
                Document document = Jsoup.connect(url).get();
                // Meta data elemanını kullan
                Elements description = document
                        .select("meta[name=generator]");
                // Content ile eşleştir
                desc = description.attr("content");
            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            //TextView'a meta içeriğini yaz
            TextView txtdesc = (TextView) findViewById(R.id.textView);
            txtdesc.setText(desc);
            mProgressDialog.dismiss();
        }
    }

    // Logoya erişmek için.
    private class Logo extends AsyncTask<Void, Void, Void> {
        Bitmap bitmap;

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            mProgressDialog = new ProgressDialog(MainActivity.this);
            mProgressDialog.setTitle("Eren");
            mProgressDialog.setMessage("Yükleniyor...");
            mProgressDialog.setIndeterminate(false);
            mProgressDialog.show();
        }

        @Override
        protected Void doInBackground(Void... params) {

            try {
                // Web sitesine bağlan
                Document document = Jsoup.connect(url).get();
                //a içerisinde img nesnesinin içinden
                Elements img = document.select("a img[src]");
                // src eriştik.
                String imgSrc = img.attr("src");
                // URL'den resmi çek.
                InputStream input = new java.net.URL(imgSrc).openStream();
                // Bitmap'a aktar
                bitmap = BitmapFactory.decodeStream(input);

            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            //Imageview içine bitmap'den geleni eşitle
            ImageView logoimg = (ImageView) findViewById(R.id.imageView);
            logoimg.setImageBitmap(bitmap);
            mProgressDialog.dismiss();
        }
    }
}

Screenshot_2015-05-14-11-36-43

Bir Cevap Yazın