0

興味深いシナリオがあり、Cocoa でも実行できるかどうかを知る必要があります。

無料で、特定の都市/郵便番号の時間ごとの天気予報を表示できる 1 時間ごとの天気予報 API を見つけようとしましたが、見つかりませんでした。別の方法として、HTML ページ ソース全体を読み取り、iPhone アプリで使用できるように 1 時間ごとの天気の部分を削除できるかどうかを確認します。

NSString *request = @"http://www.findlocalweather.com/hourly/il/chicago.html";

    NSURL *URL = [NSURL URLWithString:request];
    NSError *error;    
    NSString *HTML = [NSString stringWithContentsOfURL:URL encoding:NSASCIIStringEncoding error:&error];

    NSLog(@"HTML: %@", HTML);

http://www.findlocalweather.com/hourly/il/chicago.htmlリンクにアクセスすると、グリッドの毎時予報が表示されます。私がする必要があるのは、その HTML ソースから、各日付、雲、一時行を読み取り、それを配列に入れることです。例えば

NSMutableArray1 には、「AUG 05 9:00 AM、AUG 05 10:00 AM、AUG 05 11:00 AM ...」というオブジェクトが含まれます。

NSMutableArray2 には、「ほぼ曇り、ほぼ晴れ ...」というオブジェクトが含まれます。

NSMutableArray3 にはオブジェクト「73、84、76、91 ....」が含まれます (温度は度)

これはできますか?HTML ページのソース文字列を解析して、必要なものを取得しようとした人はいますか?

4

2 に答える 2

1

NSRegularExpressionで簡単に実行できます

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:EnterStringWithPatternHere options:0 error:NULL];
NSArray *matches = [regex matchesInString:webPage options:0 range:NSMakeRange(0, [webPage length])];

正規表現の使用方法に関するいくつかの優れたチュートリアルがあります (これらはほとんどのプログラミング言語でほぼ同じですが、NSRegEx の特徴に注意してください)。

例: HMTL ファイルからの pdf リンクの解析。

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"href=\"([^<>]*).pdf\"" options:0 error:NULL];
NSArray *matches = [regex matchesInString:webPage options:0 range:NSMakeRange(0, [webPage length])];
for (int i=0; i<[matches count]; i++) {
    NSTextCheckingResult *match = [matches objectAtIndex:i];
 NSString *theFullString = [NSString stringWithFormat:@"%@.pdf",[webPage   substringWithRange:[match rangeAtIndex:1]]];}

このコードは少し前に書きました。少し実験して、NSLog またはブレークポイントを利用することをお勧めします。これは大いに役立ちます。RegEx スタッフに入るには少し時間がかかりますが、非常にうまく機能します。

于 2012-08-05T15:38:10.260 に答える
0

XML パーサー NSXMLParser は、HTML にも使用できます。デリゲート メソッドを使用してドキュメントの要素を段階的に処理するため、抽出されたフィールドを構築する必要があります。返された HTML ドキュメントの構造を調べて、どの要素 (タグ) を抽出するかを確認し、それに応じてデリゲート メソッド didEndElement にコードを挿入する必要があります。

于 2012-08-05T20:49:57.173 に答える