androidでスクレイピングを練習
前回のタスク管理アプリは一部修正して、「プロセスクローズ」という名前でMarketで無料アプリとして公開しました。
Xperiaで普段使っていますが、今のところ大きな不具合はない模様。
問題点としてはアプリを通常終了しただけでは解放されないメモリがあること。
ここは追いかけると時間がかかるので放置です。
今は、Androidでページをパースする処理を調べてます。
調べたところ、タグの整形にはWebKitが優れているそうで、WebKitが処理したタグを元にスクレイピングがいいよ!な、情報を元に調査してます。
処理能力が高くない端末でスクレイピングなどもっての他。。と書かれてましたが、あえて気にしないことにします。
以下が参考になりました。
WebViewとJavaScriptを使ったスクレイピング オプション
最初は優しくdeveloper.android.comのHello, WebViewを見るのがよさそうです。
次にkoigoiさんのWebViewを使ったスクレイピングを参考に「Hello, WebView」に修正を加えました。
本来、Serviceを使うべきなのでしょうが、先ずはHellow World。
import android.app.Activity; import android.os.Bundle; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.Toast; public class testwebkit extends Activity { WebView webview; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main ); webview = (WebView) findViewById(R.id.webview); webview.getSettings().setJavaScriptEnabled(true); webview.loadUrl("http://www.google.com"); // // hogeという変数で Hogeへアクセス webview.addJavascriptInterface(new Hoge(), "hoge"); webview.setWebViewClient(new WebViewClientDemo()); } private class WebViewClientDemo extends WebViewClient { @Override public void onPageFinished(WebView view, String url) { Toast.makeText(testwebkit.this, "pageload finished", Toast.LENGTH_LONG).show(); webview.getSettings().setJavaScriptEnabled(true); webview.loadUrl("javascript:hoge.appearToast(document.title);"); } } final class Hoge { public Hoge() { } public void appearToast(String message) { Toast.makeText(testwebkit.this, message, Toast.LENGTH_LONG).show(); } } }