2012-04-12 2 views
3

websiteのモバイルアプリ(iOS 5.0以上互換)を開発しています。ユーザーはリンク先ページから特定のデータを直接表示できます。ユーザーは、特定のオプション(場所や日付)を選択して結果を絞り込むことができます。 Webサービスコールは提供されず、データベースへのアクセスも許可されません。だから私の唯一のデータ収集の手段は、サイトを直接スクラップすることです。iOS用のjavascriptページからデータをスクラップするにはどうすればよいですか?

私の問題は、ユーザーが電話からのhttpリクエストでどのようにサイト上で変更できるか分かりません。

:たとえば下記サイト:私は、関連するデータを分離することができるよ

enter image description here

がサイトから引き出すことができるし、次のコマンド

NSString *html = [NSString stringWithContentsOfURL:urlrequest encoding:NSUTF8StringEncoding error:&err]; 

に文字列として保存します

// I decided to add the script function name in case anyone wanted to look for themselves 
<script type="text/javascript" language="Javascript"> 
//<![CDATA[ 
function loadData(){ 

var winMsgTitle = "Date: 04/11/2012"; 

// this is the actual data I'm concerned with: 
gLatLong = new GLatLng(31.59019444444444, -110.50655555555555); 
tmpMapIcon = new MapIcon("0_0", 21, 15); 
marker = createMarker(gLatLong, 0.0, createInfoWinMsg(winMsgTitle, ".00", ".84", "5711", "2012", "", "07:00"), tmpMapIcon); 
map.addOverlay(marker); 
point = null;marker = null; 
gLatLong = new GLatLng(32.2938260182, -110.7896411419); 
tmpMapIcon = new MapIcon("0_0", 21, 15); 
marker = createMarker(gLatLong, 0.0, createInfoWinMsg(winMsgTitle, ".00", "1.00", "1254", "2012", "", "07:00"), tmpMapIcon); 
map.addOverlay(marker); 
point = null;marker = null; 
gLatLong = new GLatLng(33.5966853633, -112.1744066477); 
tmpMapIcon = new MapIcon("0_0", 21, 15); 
marker = createMarker(gLatLong, 0.0, createInfoWinMsg(winMsgTitle, ".00", ".70", "256", "2012", "", "07:00"), tmpMapIcon); 
map.addOverlay(marker); 
point = null;marker = null; 

注:明らかに多くの点がありますが、これはちょうど切り捨てです

別の場所や日付を取得するには、サイトから手動で選択し、右側のペインでオプションを選択する必要があります。私の質問は、どうすればこれらの変更をobjective-cを介してプログラムで行うのですか?

答えて

2

UIWebViewを使用してそのページをロードするとします。

可能な解決策の1つは、右側のペインで通常のユーザー操作をシミュレートするJavaScript関数を作成することです(たとえば、jQueryのトリガー関数を使用してドロップダウンリストを選択し、「日付範囲」を選択するなど)。

これらのJavaScript関数は、アプリケーションコード内で文字列としてコード化することができます。

次に、これらのjavascript機能を実行するためのWebViewにstringByEvaluatingJavaScriptFromString:を呼び出す:

ここ
[webView stringByEvaluatingJavaScriptFromString:javascript] 

JavaScriptのパラメータは、あなたがあなたのJavaScript関数を呼び出すよう構築文字列です。たとえば、次のように

NSString *javascript = [NSString stringWithFormat:@"selectRegion(%@)", targetRegion]; 

これを実行すると、私はあなたがこれらのJavaScriptを書くことをお勧めしたいと最初に期待するとして彼らが動作するようにブラウザのデバッグ・ツール(Safariのウェブインスペクタ、FirefoxのFirebugのプラグインを...)を使用して、それらをテスト。

+0

サイトには、必要なものがすべて含まれているmozillaのWebコンソールから呼び出せる「loadData」機能があることがわかりました。その関数を呼び出すことは可能ですか? – KronoS

+0

それはうまくいくと思います。なぜそれを書いてテストしてみませんか? –

+0

私はちょっと笑っています。 – KronoS

0

私はあなたを正しく理解していれば、あなたのユーザーにウェブサイトを表示させずにデータをプルしたいのですか?

私が現在考えることができる唯一の解決策は、ユーザー入力をシミュレートするためのJavaScriptマジックを実行してからデータを取り出す場合、オフスクリーンのUIWebViewです。

これは非常にハッキリなアプローチであり、私はこれを出荷アプリケーションで使用することを推奨しません。
実際には、サイト構造を変更するとアプリが機能しなくなるため、ウェブスクラップを何もしないことをお勧めします。

実際にアプリを開発している場合は、適切なアプリケーションを作成するためにウェブサービスが必要であることを伝えてください。

「自分のために」働いていないだけでなく、サービスを利用してデータを取得するアプリを書こうとしている場合、あなたのやっていることは複雑ではなく、おそらくEULAにも違反しているはずですしたがって、まったくそれをしないでください。彼らに連絡することを検討し、その場合にあなたと働くことができるかどうかを見てください。

+0

アンドロイドアプリがこれを行います。私も "彼ら"と私の先生の両方のために働いています;)。したがって、Webサービスの設定はすぐには利用できません。私は彼らと話をし、呼び出されるべき何らかの種類のWebサービスを実装することを強く推奨しています*。しかし、この場合は、Web廃棄ソリューションが必要です。私はEULAも違反していません。ちょうどFYI。 – KronoS