0

さまざまなコード変更の調査と試行に約16時間費やしましたが、これを理解することはできません。ASIHTTPrequestを使用してWebサイトを使用するiOSアプリがあります。

-(void)refresh{
    NSURL *url = [NSURL URLWithString@"http://undignified.podbean.com/"];
    ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
    [request startSynchronous];
    NSString *response = [request responseString];
    NSLog(@"%@",response];
 }

上記のコードは、Webサイトのソースを返し、NSLogを介してコンソールに吐き出します。これから達成しようとしている目標は、「responseString」で* .mp3で終わるURLを検索し、それらを配列にロードして、最後にmp3URLをUITableViewにロードすることです。

要約する:

  1. ASIHTTPRequestを使用したWebサイトデータの消費
  2. * .mp3拡張子を持つすべてのリンクをresponseStringで検索し、それらを配列にロードしようとしています。
  3. 解析されたリンクをUITableViewに追加します。

このジャンクションでは、この時点で適切な判断を下すにはあまりにも多くのことを試みたと思います。正しい方向への提案や微調整は非常にありがたいです。

以下は、応答(HTML)の例です。HTMLソース全体がかなり大きいため、これは単なるスニペットであることに注意してください。ただし、これにはmp3ファイルのセクションが含まれます。

a href="http://undignified.podbean.com/mf/web/ih2x8r/UndignifiedShow01.mp3"         target="new"><img src="http://www.podbean.com/wp-content/plugins/podpress/images/audio_mp3_button.png" border="0" align="top" class="podPress_imgicon" alt="icon for podbean" /></a> &nbsp;Standard Podcasts [00:40:24m]: <a href="javascript:void(null);" onclick="podPressShowHidePlayerDiv('podPressPlayerSpace_2649518', 'mp3Player_2649518_0', '300:30', 'http://undignified.podbean.com/mf/play/ih2x8r/UndignifiedShow01.mp3'); return false;"><span id="podPressPlayerSpace_2649518_label_mp3Player_2649518_0">Play Now</span></a> | <a href="javascript:void(null);" onclick="window.open ('http://undignified.podbean.com/wp-content/plugins/podpress/podpress_backend.php?podPressPlayerAutoPlay=yes&amp;standalone=yes&amp;action=showplayer&amp;pbid=0&amp;b=458211&amp;id=2649518&amp;filename=http://undignified.podbean.com/mf/play/ih2x8r/UndignifiedShow01.mp3', 'podPressPlayer', 'toolbar=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=1,width=660,height=360'); return false;">Play in Popup</a> | <a href="http://www.podbean.com/podcast-download?b=458211&f=http://undignified.podbean.com/mf/web/ih2x8r/UndignifiedShow01.mp3" target="26108">Download</a> | <a href="http://www.podbean.com/podcast-players?b=458211&p=2649518&f=http://undignified.podbean.com/mf/play/ih2x8r/UndignifiedShow01.mp3" target="38148">Embeddable Player</a> | <a>Hits (214)</a><br/
4

3 に答える 3

0

私はこれを2つのステップで行います:

  1. すべてのhref値を取得する

  2. 正規表現を使用して、.mp3で終わる有効なURLを確認します

ところで、ASIHTTPRequestは古くなっていると思います。また、HTMLのフェッチにのみ使用する場合は、iOSフレームワークの組み込みメソッドを調べてそれを実行することをお勧めします。

于 2012-04-09T13:51:42.260 に答える
0

requestDidReceiveResponseHeadersSelectorを使用してヘッダーからファイル名を取得し、NSDictionaryヘッダーからすべてのキーと値を出力しようとします。

于 2012-04-09T18:09:36.760 に答える
0

「そんな風にしないで」という答えは本当に嫌いですが…そんな風にしないでください。

投稿したアドレスから、html内のsへのすべてのリンクを抽出することができます。mp3しかし、これはほとんどの場合、物事にアプローチするための間違った方法であり、この場合も例外ではありません。

基本的に、あなたがやろうとしているように見えるのは、ポッドキャスタークライアントを作成することです。他の人が以前にこのタイプのユースケースをどのように処理したかについて、いくつか考えておく必要があります。通常、ポッドキャストには、RSS探しているデータの概要を正確に示すフィードが関連付けられています。ポッドキャストも例外ではありません。質問で提供されたリンクに移動し、ページを見て「subscribe to podcast」または「RSS」のいずれかを探すと、RSSフィードにつながるリンクが見つかりますhttp://undignified.podbean.com/feed/。このアドレスは、ポッドキャストのXMLを含むにつながります。item

このドキュメントは、元のアドレスから返されたドキュメントとは異なり、有効です。XMLつまり、で解析できますNSXMLParserNSXMLParser非常に強力で柔軟性があります。しかし、始めるのは少し難しいです。NSXMLParserこれは、独自のデリゲートとして機能するサブクラスのサンプルコードです。

UnDigParser.h

#import <Foundation/Foundation.h>
@interface UnDigParser : NSXMLParser <NSXMLParserDelegate>
@property (readonly) NSArray *links;
@end

UnDigParser.m

#import "UnDigParser.h"
@implementation UnDigParser{
    NSMutableArray *_links;
}
@synthesize links = _links;
-(void)parserDidStartDocument:(NSXMLParser *)parser{
    _links = [[NSMutableArray alloc] init];
}
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{
    if ([elementName isEqualToString:@"enclosure"]){
        NSString *link = [attributeDict objectForKey:@"url"];
        if (link){
            [_links addObject:link];
        }
    }
}
-(BOOL)parse{
    self.delegate = self;
    return [super parse];
}
@end

このコードは次のようにテストできます。

dispatch_async(dispatch_get_global_queue(0, 0), ^{
    NSURL *url = [NSURL URLWithString:@"http://undignified.podbean.com/feed/"];
    // This is a sync call thus the background thread
    UnDigParser *parser = [[UnDigParser alloc] initWithContentsOfURL:url];
    [parser parse];
    NSLog(@"links:%@",parser.links);
});

ログに記録された出力は次のとおりです。

links:(
    "http://undignified.podbean.com/mf/feed/cfdayc/UndignifiedShow03.mp3",
    "http://undignified.podbean.com/mf/feed/wbbpjw/UndignifiedShow02Final.mp3",
    "http://undignified.podbean.com/mf/feed/ih2x8r/UndignifiedShow01.mp3",
    "http://undignified.podbean.com/mf/feed/t4x54d/UndignifiedShow00.mp3"
)

それはあなたが始めるのに十分なはずです。

于 2012-04-10T03:46:00.530 に答える