3

ユーザーがランディング ページから特定のデータを直接表示できるWeb サイト用のモバイル アプリ (iOS 5.0 以降と互換性あり) を開発しています。ユーザーは、特定のオプション (場所や日付など) を選択して結果を絞り込むことができます。彼らは Web サービス呼び出しを提供しておらず、データベースへのアクセスを許可しません。したがって、データを収集する唯一の手段は、サイトを直接「スクレイピング」することです。

私の問題は、ユーザーが電話からの http 要求からサイトで行うことができる変更を行う方法がわからないことです。例えば以下のサイト。

ここに画像の説明を入力

次のコマンドを使用して、サイトから取得し、文字列として保存できます

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 を介してプログラムでこれらの変更を行うにはどうすればよいですか?

4

2 に答える 2

2

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

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

これらの JavaScript 関数は、アプリ コードで文字列としてコーディングできます。

次に、stringByEvaluatingJavaScriptFromString:webview を呼び出して、これらの JavaScript 関数を実行します。

[webView stringByEvaluatingJavaScriptFromString:javascript]

ここで、javascript パラメータは、JavaScript 関数を呼び出すために作成する文字列です。例えば:

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

これを行うときは、これらの JavaScript を記述し、ブラウザーのデバッグ ツール (Safari の Web インスペクター、Firefox の FireBug プラグインなど) を使用してテストし、期待どおりに動作することを最初に確認することをお勧めします。

于 2012-04-13T00:05:20.150 に答える
0

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

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

ただし、これは非常にハックなアプローチであり、配送アプリケーションでこれを使用することはお勧めしません。
実際、サイト構造を変更するとアプリが機能しなくなるため、Web スクレイピングをまったく行わないことをお勧めします。

あなたが本当に「彼らのために」アプリを開発しているのなら、良いアプリケーションを書くためにはウェブサービスが必要だと彼らに伝えてください。

「彼らのために」働いているのではなく、彼らのサービスを使用してデータを取得するアプリを作成しようとしているだけの場合、あなたがしていることは複雑であるだけでなく、おそらく彼らの EULA にも違反しているため、そうするべきではありません。それはまったく。それらに連絡することを検討し、その場合に彼らがあなたと一緒に働くことができるかどうかを確認してください.

于 2012-04-13T00:15:11.377 に答える