Hatena::Groupiphone-dev

haoyayoi Dev Style このページをアンテナに追加 RSSフィード

2009-07-18

ImageStoreの画像取得失敗時対処

| 03:48 | ImageStoreの画像取得失敗時対処 - haoyayoi Dev Style を含むブックマーク はてなブックマーク - ImageStoreの画像取得失敗時対処 - haoyayoi Dev Style ImageStoreの画像取得失敗時対処 - haoyayoi Dev Style のブックマークコメント

ImageStoreを使ってクライアントを作っていたのですが、画像取得時に503や404が返ってきた場合でも正常なダウンロードとみなされていたようで、UIImageのメモリ操作時にエラーで落ちることがありました。

HttpClientのconnection:didReceiveResponse:にて、データ詳細の如何(imageではなくtextだった等)に関わらず成功として扱われるのが原因だった様子。とりあえずContent-Typeでimageでは無かった場合にconnection:didFailWithError:へ投げることで対処。

HttpClient.m

- (void)connection:(NSURLConnection*)sender didReceiveResponse:(NSHTTPURLResponse*)aResponse
{
	[response release];
+	NSDictionary *resHead = [aResponse allHeaderFields];
+	NSString *contenttype = [resHead objectForKey:@"Content-Type"];
+	NSArray *datatype = [[contenttype componentsSeparatedByString:@"/"] objectAtIndex:0];
+	if([datatype isEqual:@"image"]){
		response = [aResponse retain];
+	}else{
+		[self connection:sender didFailWithError:nil];
+	}
}

connection:didFailWithError:に投げる代わりに、エラー時代替イメージのNSDataを差し込むようにしむけるのもありです。

Reject DataBase for iPhone DeveloperのRSS書いた[修正有り]

| 08:24 | Reject DataBase for iPhone DeveloperのRSS書いた[修正有り] - haoyayoi Dev Style を含むブックマーク はてなブックマーク - Reject DataBase for iPhone DeveloperのRSS書いた[修正有り] - haoyayoi Dev Style Reject DataBase for iPhone DeveloperのRSS書いた[修正有り] - haoyayoi Dev Style のブックマークコメント

Rejectに関して情報が蓄積されてはいるものの、参照と更新の確認のために毎回アクセスするのが面倒で、結果として存在を忘れちゃっていたReject DataBase for iPhone DeveloperRSSでもあれば楽でいいのになーとは思うんですが、備わってなかったのでスクレイピングして勝手にこしらえました。

cronで毎時更新にしています。

Reject DataBase for iPhone Developer RSS Feed

以下ソース。

#!/usr/local/bin/perl

use strict;
use warnings;
use Web::Scraper;
use XML::RSS;
use URI;

my $scraper = scraper {
    process '//td[2]/text()', 'Name[]' => 'TEXT';
    process '//td[3]/a', 'Subject[]' => 'TEXT';
    process '//td[3]/a', 'Url[]' => '@href'; 
}->scrape(URI->new("http://iphone-rejectdb.appspot.com/main.html"));

my $RSS = XML::RSS->new( version => "2.0", encode_output => 0 );
$RSS->channel(
    title       => "Reject Database for iPhone Developer",
    link        => "http://iphone-rejectdb.appspot.com/",
    description => "Let's share knowhow by everyone and avoid the reject at the application program examination.",
);
foreach my $index (0 .. @{$scraper->{Subject}} -1 ){
    my $scraper_desc = scraper {
        process '//tr[8]/td[2]/p', 'Desc' => 'TEXT';
    }->scrape(URI->new($scraper->{Url}[$index]));
    $RSS->add_item(
        title => $scraper->{Subject}[$index],
        link => $scraper->{Url}[$index],
        description => $scraper_desc->{Desc},
    );
}

$RSS->save("RejectDB.rss");

管理者に作ってくれるように依頼するのがいいんでしょうけど、最終更新日が結構前なのでアクティブじゃないかもしれないな、ということで。

スクレイピングしてiPhoneアプリ用にインターフェイス作っちゃうとさらに良いかもしれませんが、iWebKitまだ触ってないので…。

修正

コメントの突っ込みで購読確認したところ、なんかすでに購読済みでした。未読の山に埋もれてたので、購読してたけど読んでなかったとかそんな具合ぽいです。ということで、上記のfeedは削除します。

リジェクトの本文がRSSで配信されてなかったので、WedataのLDRFullFeedにSiteInfoを追加しておきました。LDR使っててLDRFullFeedをインストールしてればG押すと、リジェクトに関する詳細が挿入されます。

iwadoniwadon2009/07/18 12:46フィードには以下のものがあるように見えますがいかがでしょうか。
http://iphone-rejectdb.appspot.com/feed?format=rss2
http://iphone-rejectdb.appspot.com/feed?format=atom

hao_yayoihao_yayoi2009/07/18 20:14feed存在してました。しかもなんか購読してたっぽいです。
未読の中に埋もれてたので、弄って読みやすくすることにします…。