2015-05-09 2 views
0

Мне и моему другу нужна помощь с небольшим приложением, которое мы пытаемся создать для школьного проекта. Во-первых, цель этого приложения - найти аптеку вокруг того, где мы живем. Эти два являются сайты, которые я пытаюсь вытащить информацию из (это называется вытягивать?)Как мы анализируем информацию с этих веб-страниц?

http://www.istanbulsaglik.gov.tr/w/nobet/liste.asp?lc=0&gun=09.05.2015

  • пистолет = день/дата

  • ЖХ = идентификатор города

  • cs ежедневно отправляется в город и ежедневно меняется, это всего лишь номер.

на этой странице.

И/ИЛИ

http://www.nobetcieczanebul.com/

это один 'выглядит' гораздо проще получить необходимую информацию. из.

Они оба содержат информацию, которая мне нужна; название аптеки, адрес и, возможно, номера телефонов. Используя JSOUP, я надеюсь разобрать эту информацию, но мне нужна помощь. Мой первый приоритет - использование webview.

Сначала мы прочитаем cs из HTML, после чего мы поместим cs в код и назовем все имена, даты и адреса аптечных магазинов.

Вот мой пример кода, это один называет ID 32 город дате 05/05/2015, которая содержит имя и т.д.

import android.os.AsyncTask; 
import android.support.v7.app.ActionBarActivity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.webkit.WebView; 
import android.widget.Button; 
import android.widget.ProgressBar; 
import android.widget.TextView; 
import org.jsoup.Jsoup; 
import org.jsoup.nodes.Document; 

import java.io.IOException; 

public class MainActivity extends ActionBarActivity { 

Button btnGetir; 
ProgressBar pb; 
TextView tv; 
Button btnNobet; 
TextView tvNobet; 
WebView wv; 

class mytask extends AsyncTask<Void,Void,Void>{ 
String Title; 
@Override 
protected void onPostExecute(Void aVoid) { 
    super.onPostExecute(aVoid); 
    pb.setVisibility(View.INVISIBLE); 
tv.setText(Title); 

} 

@Override 
protected void onPreExecute() { 
    super.onPreExecute(); 

    pb.setVisibility(View.VISIBLE); 
} 

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

    try { 
     Document myDoc= Jsoup.connect("http://www.ticaret.edu.tr").get(); 
     Title=myDoc.title(); 

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

    class myNobettask extends AsyncTask<Void,Void,Void>{ 
    String Title; 
    @Override 
    protected void onPostExecute(Void aVoid) { 
     super.onPostExecute(aVoid); 
     pb.setVisibility(View.INVISIBLE); 
     wv.loadData(Title, "text/html", "UTF-8"); 

    } 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 

     pb.setVisibility(View.VISIBLE); 
    } 

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

     try { 
      Document myDoc= Jsoup.connect("http://apps.istanbulsaglik.gov.tr/eczane/GetNobetciEczaneler.aspx?lc=32&gun=05.05.2015&cs=6e79f453").get(); 


      Title=myDoc.html(); 


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

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
btnGetir=(Button) findViewById(R.id.btnTitleGetir); 
tv=(TextView)findViewById(R.id.tvSonuc); 
    pb=(ProgressBar) findViewById(R.id.progressBar); 

    btnNobet =(Button)findViewById(R.id.btnNobetci); 
    tvNobet=(TextView)findViewById(R.id.tvNobetci); 
wv=(WebView) findViewById(R.id.webView); 

    btnGetir.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      mytask newtask= new mytask(); 
      newtask.execute(); 
     } 
    }); 


    btnNobet.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      myNobettask task= new myNobettask(); 
      task.execute(); 
     } 
    }); 
} 


@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.menu_main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_settings) { 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
    } 
} 
+1

Это обязательно использовать один из этих сайтов? , потому что вы можете использовать «Google Places API», более эффективный и предоставляет json o xml response (легко разобрать). –

+0

Я «верю», потому что мы пытаемся найти дежурную аптеку. Не знаю, правильно ли это сказать, дежурная аптека -> аптека, которая работает весь день и всю ночь, неотложная аптека. И эти два сайта - те, которые показывают это. API Google Places показывает им? –

+0

Вот список всех типов, которые API Google может предоставить: https://developers.google.com/places/supported_types –

ответ

0

С JSoup вы должны быть в состоянии определить, какие CSS селекторы/HTML компоненты, которые вы хотите для синтаксического анализа.

Document doc = Jsoup.connect(url).get(); Elements links = doc.select("a[href]"); // This should return a collection of links.

можно указать дальше так, возможно, вы хотите, чтобы вернуть подмножество всех тегов абзаца, вы могли бы указать:

Document doc = Jsoup.connect(url).get(); Elements linksInPTags= doc.select("p > a[href]");

Прочитайте Jsoup cookbook. Это довольно ясно и очень полезно.

0

Вот фрагмент кода с помощью Google Places API, что может очень помогает:

public static void makeRequest(String url) 
    { 

     HttpClient httpclient = new DefaultHttpClient(); 
     HttpGet httpget = new HttpGet(url); 
     HttpResponse response; 
     try { 
      response = httpclient.execute(httpget); 
      HttpEntity entity = response.getEntity(); 
      if (entity != null) { 
       InputStream instream = entity.getContent(); 
       String result= convertStreamToString(instream); 
       instream.close(); 
      } 
     } catch (Exception e) {} 
    } 

    private String convertStreamToString(InputStream is) { 
     BufferedReader.readLine() 
     BufferedReader reader = new BufferedReader(new InputStreamReader(is)); 
     StringBuilder sb = new StringBuilder(); 
     String line = null; 
     try { 
      while ((line = reader.readLine()) != null) { 
       sb.append(line + "\n"); 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } finally { 
      try { 
       is.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
     return sb.toString(); 
    } 

Шаги для выполнения:

1 - Вы должны сгенерировать URL, который выполняет свою потребность (в качестве примера: https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=-33.8670522,151.1957362&radius=500&types=food&name=cruise&key=AddYourOwnKeyHere) (полное описание создания URL-адреса существует в приведенной выше ссылке)

2 - Это необязательно, но более надежно использовать этот метод в фоновом потоке

3 - Вы должны проанализировать ответ (ответ может быть в формате json или xml, который вы можете выбрать из URL-адреса) для выполнения ваших потребностей (вы можете получить описание полей ответов из приведенной выше ссылки)