Merih Forum Android / IOS yazılım Android'te JSOUP Parse İşlemleri

  • Toplam: 0 Oy - Ortalama: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Android'te JSOUP Parse İşlemleri

 
#1

Jsoup html taglarını parse etmemize yarayan bir java kütüphanesidir.
Merhaba arkadaşlar, bugün sizlere JSOUP ile html taglarının parse işlemlerinden bahsedeceğim. Öncelikle jsoup kütüphenesini biraz inceleyelim. Projemize dahil ettiğimiz andan itibaren projemizden bir web sayfasını response edebiliriz ve geri dönen değerlerle çalışmalar veya bir web sayfasının içindeki bir veriyi alabiliriz. Jsoup web servis olmadığı bir web projesinde mobil veya başka projeden verilere erişmekte kullanabiliriz. Html taglarını parse ederken divlerin css attiributelerinden faydalanırız. Programımızda hangi divin içini alacaksak onun yolunu veriyoruz. Bu şekilde bilgilere daha kolay ulaşabiliyoruz. Jsoup kütüphanesinin dezavantajından bahsetmek gerekirse, html taglarını parse ettiğimiz sitenin taglar üzerinde değişiklik yapması durumunda uygulamamız doğru bir şekilde çalışmayacaktır.
Kütüphaneyi kısaca tanıdıktan sonra, uygulama üzerinde birazcık pekiştirelim. Uygulamamızda 3 buton ve bir textview bulunmakta. Butonlara bastığımızda "http://ecemboluk.blogspot.com.tr/" adresinden başlık, yazı açıklaması  ve yazarı bize getirecek. Tasarım kısmına geçmeden önce kütüphanemizi projeye dahil edip internet izinlerini alarak işe koyuyalım.
Projemizin build.grandle(Module:app) kısmına dependencies bölümüne kütüphanemizi compile ediyoruz.

Kod:
compile 'org.jsoup:jsoup:1.9.2'

Daha sonra AndroidManifest.xml dosyasının içine internet izinlerimizi alıyoruz.

Kod:
<uses-permission android:name="android.permission.INTERNET" />

Daha sonra yukarıda tarif ettiğim gibi activity sayfasımızı tasarlıyoruz.

Kod:
<?xml version="1.0" encoding="utf-8"?>
<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:paddingBottom="@dimen/activity_vertical_margin"
   android:paddingLeft="@dimen/activity_horizontal_margin"
   android:paddingRight="@dimen/activity_horizontal_margin"
   android:paddingTop="@dimen/activity_vertical_margin"
   tools:context="com.ecemboluk.jsoupuygulama.MainActivity">


   <Button
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="Başlık"
       android:id="@+id/baslik"
       android:layout_marginTop="42dp"
       android:layout_alignParentTop="true"
       android:layout_alignParentLeft="true"
       android:layout_alignParentStart="true" />

   <Button
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="Açıklama"
       android:id="@+id/aciklama"
       android:layout_alignBottom="@+id/baslik"
       android:layout_toRightOf="@+id/yazar"
       android:layout_toEndOf="@+id/yazar" />

   <Button
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="Yazar"
       android:id="@+id/yazar"
       android:layout_alignTop="@+id/baslik"
       android:layout_toRightOf="@+id/baslik"
       android:layout_toEndOf="@+id/baslik" />

   <TextView
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:textAppearance="?android:attr/textAppearanceLarge"
       android:text="Jsoup Uygulama"
       android:id="@+id/textView2"
       android:layout_below="@+id/baslik"
       android:layout_alignParentLeft="true"
       android:layout_alignParentStart="true"
       android:layout_marginTop="79dp" />


</RelativeLayout>

Şimdi de kod kısmına gelelim, kod üzerinde yorum satırlarıyla olayı anlatmaya çalışacağım ve sonunda çalışma sistemini anlatan kısa bir yazı ekleyeceğim.

Kod:
   Button baslik;//Başlık butonu
   Button aciklama;//Açıklama butonu
   Button yazar;//Yazar butonu
   TextView text;//text butonu
   @Override
   protected void onCreate(Bundle savedInstanceState) {//Oncreat metodu ile nesnelerimizi oluşturduk ve classlarımızı çağırdık.
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
       text=(TextView)findViewById(R.id.textView2);
       baslik=(Button)findViewById(R.id.baslik);
       baslik.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
                 new Baslik().execute();
           }
       });
       aciklama=(Button)findViewById(R.id.aciklama);
       aciklama.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
                 new Aciklama().execute();
           }
       });
       yazar=(Button) findViewById(R.id.yazar);
       yazar.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
                new Yazar().execute();
           }
       });
   }

Başlık için oluşturduğumuz sınıfı açıklayalım.

Kod:
private class Baslik extends AsyncTask<Void,Void,Void>
   {
       String URL="http://ecemboluk.blogspot.com.tr";//site urlsi
       String baslik;
       ProgressDialog dialog;//dialog nesnesini tanımladık
       @Override
       protected  void onPreExecute()//Verilerin çekilme esnasında proggres dialog çalıştırır.
       {
           super.onPreExecute();
           dialog=new ProgressDialog(MainActivity.this);
           dialog.setTitle("Jsoup Uygulama.");
           dialog.setMessage("Veri getiriliyor");
           dialog.setIndeterminate(false);
           dialog.show();
       }
       @Override
       protected Void doInBackground(Void... params) {//Arka plan işlemleri gerçekleştirilir.
           try {
               Document doc= Jsoup.connect(URL).get();//Site ile bağlantı kurulur. Bu bağlantı doc nesnesine aktarılır.
               baslik=doc.title();// doc nesnesinden title metodu çağırılarak başlık çekilir.
           } catch (IOException e) {
               e.printStackTrace();
           }
           return null;
       }
       @Override
       protected void onPostExecute(Void avoid)//Arka plan işlemleri bittikten sonra başlık yazdırılır.
       {
           text.setText(baslik);
           dialog.dismiss();
       }
   }

Document sınıfı jsoup kütüphanesine aittir. Jsoup.connet metodu ile istenilen url'ye bağlanılır ve bilgiler document sınıfının oluşturulmuş nesnesine aktarılır. daha sonra title metodu çağırılarak sitedeki başlığı çekebilirsiniz. Bu sınıfı oluşturuken AsyncTask sınıfından kalıtım alıyoruz. AsyncTask sınıfı Java'daki Thread sınıfının Android SDK için tasarlanmış hali denilebilir daha fazla bilgiyi buradaki dersten elde edebilirsiniz.
Şimdi de açıklama için oluşturuğumuz sınıfı inceleyelim.

Kod:
private class Aciklama extends AsyncTask<Void,Void,Void>
   {
       String URL="http://ecemboluk.blogspot.com.tr/2015/06/c-ve-net-ortam-nedir-ne-degildir.html";
       String aciklama;
       String veri;
       ProgressDialog dialog;
       @Override
       protected  void onPreExecute()
       {
           super.onPreExecute();
           dialog=new ProgressDialog(MainActivity.this);
           dialog.setTitle("Jsoup Uygulama.");
           dialog.setMessage("Veri getiriliyor");
           dialog.setIndeterminate(false);
           dialog.show();
       }
       @Override
       protected Void doInBackground(Void... params) {
           try {
               Document doc= Jsoup.connect(URL).get();//Siteye bağlantı sağlanıyor.
               Elements elements=doc.select("div[class=post-entry inside]");//div tagına ait attiribute çağrılıp Element sınfının içerisindeki nesneye aktarılıyor.
               elements.select("p");//elements nesnesi içindeki p tagları çağırılıyor.
               elements.select("img").remove();//elements nesnesi içindeki img tagları siliniyor.
               veri=elements.html();//istenilen html taglarını çeker.
               aciklama=Jsoup.parse(veri).text();//html taglarını texte çevirir.
           } catch (IOException e) {
               e.printStackTrace();
           }
           return null;
       }
       @Override
       protected void onPostExecute(Void avoid)
       {
           text.setText(aciklama);
           dialog.dismiss();
       }
   }

Öncelikle en başta yaptığımız gibi site ile bağlantı kuruyoruz. Daha sonra doc nesnesine aldığımız ilgileri biraz daha ayıklayıp elements nesnesine aktarıyoruz. Burada div etiketi içindeki istediğimiz attribute ile verileri alıyoruz. daha sonra elements nesnesinden p tagındaki verileri çağırıyoruz içindeki img tagındaki verileri siliyoruz. Bunları html metodu ile string veriye çevirip daha sonra jsoup.parse metodu ile text haline çevirip yazdırıyoruz.
Son olarakta yazar sınıfını inceleyelim.

Kod:
private class Yazar extends AsyncTask<Void,Void,Void>
   {
       String URL="http://ecemboluk.blogspot.com.tr/2015/06/c-ve-net-ortam-nedir-ne-degildir.html";
       String yazar;
       String veri;
       ProgressDialog dialog;
       @Override
       protected  void onPreExecute()
       {
           super.onPreExecute();
           dialog=new ProgressDialog(MainActivity.this);
           dialog.setTitle("Jsoup Uygulama.");
           dialog.setMessage("Veri getiriliyor");
           dialog.setIndeterminate(false);
           dialog.show();
       }
       @Override
       protected Void doInBackground(Void... params) {
           try {
               Document doc= Jsoup.connect(URL).get();
               Elements elements=doc.select("div[class=author-content]");
               elements.select("h5");
               veri=elements.html();//istenilen html taglarını çeker.
               yazar=Jsoup.parse(veri).text();//html taglarını texte çevirir.
           } catch (IOException e) {
               e.printStackTrace();
           }
           return null;
       }
       @Override
       protected void onPostExecute(Void avoid)
       {
           text.setText(yazar);
           dialog.dismiss();
       }
   }

Açıklama için yapılan işlemlerin benzerlerini de yazar sınıfı içinde yapıyoruz. Böylelikle işlemleri tanımlamış oluyoruz. Kodları daha ayrıntılı bir şekilde buradan elde edebilirsiniz.  Ayrıca JSOUP hakkında daha ayrıntılı bilgiyi buradan elde edebilirsiniz.
Tekrardan kolay gelsin. Smile




Ara
Cevapla


[-]
Hızlı Cevap

İnsan Doğrulama:
Aşağıda görünen onay kutusunu işaretleyiniz. Bu işlem otomatik spam kayıtları önlemek için kullanılır.

Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Windows için 2018'in En İyi 5 Android Emülatörü hazreti.google 0 741 13-01-2019, Saat: 11:12
Son Yorum: hazreti.google
  Android Uygulamalarda Doğru Dialog Kullanımları xray 0 1,725 25-11-2017, Saat: 17:07
Son Yorum: xray
  Firebase ile Bildirim Gönderme (Android) comrate 0 2,272 17-09-2017, Saat: 16:20
Son Yorum: comrate
  Android PushButton wolfran 1 3,050 29-08-2017, Saat: 18:04
Son Yorum: suleyman
  Notasyonların Android projelerinde kullanımı dalaylama 0 1,807 07-08-2017, Saat: 21:21
Son Yorum: dalaylama

Digg   Delicious   Reddit   Facebook   Twitter   StumbleUpon  


Konuyu Okuyanlar:
1 Ziyaretçi

   
Türkçe Çeviri: MCTR, Forum Yazılımı: MyBB, © 2002-2020 MyBB Group.  



Merih Forum® bilgi paylaşım platformu. 2015-2020 Tüm hakları saklıdır.