0

見つけた関連するすべての質問 (検索: "NSURLErrorDomain -1000") を調べましたが、解決策が見つかりませんでした。眼の鋭い人が助けてくれるかもしれません。

私は iOS 6 から Instagram API への呼び出しを行っています (ただし、動作する部分は iOS 5.1 で既に動作しています)。私は Koolistov のNSURL+PathParameters.hをヘルパーとして使用していますが、URL に必要なすべてのものを実際にエスケープしていると理解しています。

いくつかの予備:

NSDictionary *parameters = nil;
NSURL *URL = [NSURL URLWithString:@"https://api.instagram.com/"];
parameters = [NSDictionary dictionaryWithObjectsAndKeys:
    INSTAGRAM_CLIENT_ID, @"client_id", nil];
URL = [URL URLByReplacingPathWithPath:@"/v1/tags/awesome/media/recent"];
URL = [URL URLByAppendingParameters:parameters];

(INSTAGRAM_CLIENT_IDアプリのクライアント ID を含むマクロです。)

この URL は期待どおりに機能します。

ただし、次のように構成された URL では、NSURLErrorDomain一貫して code = -1000 が得られます (デバイス上および iPhone 5.1 と 6.0 シミュレーターの両方で)。

double latitude = 48.858844;
double longitude = 2.294351;
parameters = [NSDictionary dictionaryWithObjectsAndKeys:
                  [NSNumber numberWithDouble:latitude], @"lat",
                  [NSNumber numberWithDouble:longitude], @"lng",
                  [NSNumber numberWithInt:2000], @"distance",
                  INSTAGRAM_CLIENT_ID, @"client_id",
                  nil];
URL = [URL URLByReplacingPathWithPath:@"/v1/media/search"];
URL = [URL URLByAppendingParameters:parameters];

次に、次を作成しますNSURLRequest

NSURLRequest *req = [NSURLRequest requestWithURL:URL];

から URL を出力するNSURLRequestと、まったく問題ないように見えます。

https://api.instagram.com/v1/media/search?client_id=REDACTED&distance=2000&lat=48.858844&lng=2.294351

MyDownloaderMatt Neuburg のProgramming iOS 5の Chapter 37 から使用していMyDownloaderますNSURLRequest

MyDownloader *downloader = [[MyDownloader alloc] initWithRequest:req];

RFC 3986によると、アンダースコアまたはドットをエスケープする必要はありません。エスケープするものは他にありません。とにかく、NSURL+PathParameters.h でエスケープを処理する必要があります。それで、ここで何が起こっているのですか?私は何が欠けていますか?

さらに奇妙なことに、URL を構成するこのさらに単純な方法でも同じエラーが発生します。

parameters = [NSDictionary dictionaryWithObjectsAndKeys:
    INSTAGRAM_CLIENT_ID, @"client_id", nil];
URL = [URL URLByReplacingPathWithPath:@"/v1/media/popular"];

それもOKに見えます:

https://api.instagram.com/v1/media/popular?client_id=REDACTED

これらの URL はすべて、Instagram API コンソールと直接 Safari で機能します。これらの API 呼び出しには OAuth 認証は必要なく、クライアント ID のみが必要です。

誰かが問題が何であるかを指摘できれば、私は素晴らしいと思います。

EDITlat :とのlng値を次のようにエンコード:

[[[NSNumber numberWithDouble:latitude] stringValue]
    stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]

URL や動作に変更はありません。しかし、ドットをリテラル%2Eの 's に置き換えると、パス ヘルパーはパーセント記号をエンコードし、結果は%252E...

4

1 に答える 1

0

解決しました。上記の URL に問題はありませんでした。問題は周囲のコードにありました。私は自分の質問に答えているので、Instagram API を使用している誰かがその答えから恩恵を受けるかもしれません。

/v1/tags/tagname/media/recentAPIのエンドポイントはpaginationJSON 応答でオブジェクトを返しますが、/v1/media/searchとは返さ/v1/media/popularないことがわかります。そのオブジェクト内から、次の写真のバッチへの URL を という値で見つけることができますnext_url

私はドキュメントを正しく読んでおらず (また、場所によっては少し混乱していました)、また Instagram API エンドポイントごとに動作が異なるため、私のコードnext_urlはこれらすべてのケースで値を見つけることを期待していました。したがって、私が取得していた「悪い URL」NSURLConnectionは、最初の URL ではなく、2 番目の接続を参照していました。他の 2 つのケースではページ付けが行われていないことに気がつかなかったので、問題は最初の URL にあるに違いないと思いました。

于 2012-09-30T16:47:00.220 に答える