質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

ウェブブラウザ

ウェブブラウザ(インターネットブラウザ)とは、www上に公開されている情報リソースをユーザーに視覚的提供・操作させる機能を持ったソフトウェアプログラムです。

Q&A

解決済

2回答

5259閲覧

objective-cでウェブ上のテキストを取得したい

退会済みユーザー

退会済みユーザー

総合スコア0

Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

ウェブブラウザ

ウェブブラウザ(インターネットブラウザ)とは、www上に公開されている情報リソースをユーザーに視覚的提供・操作させる機能を持ったソフトウェアプログラムです。

0グッド

0クリップ

投稿2015/12/01 16:02

先ほど似た質問したのですが、新たに問題が発生し、調べまくってもう1歩のところまでいくんですがエラーでうまくいきません。

そこで、アドバイスをいただきたいと思って再度質問させていただきます。

objective-cでウェブ上のテキストを取得したいのですが、

最初は

http://www.yoheim.net/blog.php?q=20120605

上記のサイトを参考に、NSURLConnectionで進めていたのですが、

実行しようとするとNSURLConnectionはダメよ!みたいなエラーが出てしまいました。

そこで調べてみると今はNSURLConnectionより便利なNSURLSessionを使うようになっているようでして、

NSURLSessionでウェブ上のテキストを取得ができないかとくまなく検索をかけたのですが、

ウェブ上の画像取得方法などはあるのですがテキストの取得方法はなかなか参考になるサイトが見当たりませんでした。

objective-cでウェブ上のテキストを取得するには具体的にどのようにすればいいのでしょうか。
参考サイトでも構いません。

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ブロックにて取得する方法は以下
参考ページ
From NSURLConnection to NSURLSession

objectivec

1 2NSURL *URL = [NSURL URLWithString:@"http://www.yoheim.net/"]; 3NSURLRequest *request = [NSURLRequest requestWithURL:URL]; 4 5NSURLSession *session = [NSURLSession sharedSession]; 6NSURLSessionDataTask *task = [session dataTaskWithRequest:request 7 completionHandler: 8 ^(NSData *data, NSURLResponse *response, NSError *error) { 9 10 NSString *html = [[NSString alloc] initWithBytes:data.bytes length:data.length encoding:NSUTF8StringEncoding]; 11 NSLog(@"html = %@",html); 12 13 }]; 14 15[task resume];

デリゲートにて取得する場合は以下
参考ページ
iOS 弱者が NSURLConnection を NSURLSession に置き換えた話

objectivec

1 2@interface ViewController ()<NSURLSessionDelegate> { 3 NSMutableData *receivedData; 4} 5 6// HTTPリクエスト 7NSURL *URL = [NSURL URLWithString:@"http://www.yoheim.net/"]; 8NSURLRequest *request = [NSURLRequest requestWithURL:URL]; 9NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration]; 10NSURLSession *session = [NSURLSession sessionWithConfiguration:sessionConfiguration 11 delegate:self 12 delegateQueue:[NSOperationQueue mainQueue]]; 13NSURLSessionDataTask *task = [session dataTaskWithRequest:request]; 14[task resume]; 15 16 17/** 18 * HTTPリクエストのデリゲートメソッド(データ受け取り初期処理) 19 */ 20- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask 21didReceiveResponse:(NSURLResponse *)response 22 completionHandler:(void (^)(NSURLSessionResponseDisposition disposition))completionHandler { 23 // 保持していたレスポンスのデータを初期化 24 25 // receiveDataはフィールド変数 26 receivedData = [[NSMutableData alloc] init]; 27 28 // didReceivedData と didCompleteWithError が呼ばれるように、通常継続の定数をハンドラーに渡す 29 completionHandler(NSURLSessionResponseAllow); 30} 31 32/** 33 * HTTPリクエストのデリゲートメソッド(受信の度に実行) 34 */ 35- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data { 36 // 1つのパケットに収まらないデータ量の場合は複数回呼ばれるので、データを追加していく 37 [receivedData appendData:data]; 38} 39 40/** 41 * HTTPリクエストのデリゲートメソッド(完了処理) 42 */ 43- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error { 44 if (error) { 45 // HTTPリクエスト失敗処理 46 47 } else { 48 // HTTPリクエスト成功処理 49 NSString *html = [[NSString alloc] initWithBytes:receivedData.bytes length:receivedData.length encoding:NSUTF8StringEncoding]; 50 NSLog(@"html = %@",html); 51 } 52}

そもそも以下の内容で通信ができない場合があるのでこちらも確認してみてください。
[iOS 9] iOS 9 で追加された App Transport Security の概要

投稿2015/12/01 22:32

_Kentarou

総合スコア8490

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2015/12/02 03:50

ありがとうございます。読解力が足らず皆様にご協力いただいた形になってしまい申し訳ありません。
guest

0

ベストアンサー

実行しようとするとNSURLConnectionはダメよ!みたいなエラーが出てしまいました。

そのエラーとやらを記載してくださいね。おそらく下記のような出力があったのでしょう。

lang

1'connectionWithRequest:delegate:' is deprecated: first deprecated in iOS 9.0 - Use NSURLSession (see NSURLSession.h)

先の質問でバージョンを明記していれば、避けられたかもしれません。曖昧な質問には曖昧な回答しかできません。無駄な時間を過ごすのはお互いに不幸です。

さて、では本題。

lang

1#import "ViewController.h" 2 3@interface ViewController () 4 5@end 6 7@implementation ViewController 8 9 10- (void)viewDidLoad { 11 [super viewDidLoad]; 12 // Do any additional setup after loading the view, typically from a nib. 13 // NSURLSessionConfiguration を作成する 14 NSURLSessionConfiguration* sessionConfig = [NSURLSessionConfiguration defaultSessionConfiguration]; 15 16 // NSURLSession を作成する 17 NSURLSession* session = [NSURLSession sessionWithConfiguration:sessionConfig delegate:nil delegateQueue:nil]; 18 19 // リクエストを作成する 20 // API (GET http://amazingengine.co.jp/mame/counter.php) 21 22 NSURL* URL = [NSURL URLWithString:@"http://amazingengine.co.jp/mame/counter.php"]; 23 NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:URL]; 24 request.HTTPMethod = @"GET"; 25 26 // NSURLSessionDataTask を作成し、通信処理を登録する 27 NSURLSessionDataTask* task = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { 28 if (error == nil) { 29 // データを取り出す 30 NSString *responseString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 31 NSLog(@"dataAsString: %@", responseString); 32 } 33 else { 34 // 失敗時エラー出力 35 NSLog(@"NSURLSessionDataTask Failed: %@", [error localizedDescription]); 36 } 37 }]; 38 // 通信を開始する 39 [task resume]; 40 41} 42 43- (void)didReceiveMemoryWarning { 44 [super didReceiveMemoryWarning]; 45 // Dispose of any resources that can be recreated. 46} 47 48@end

iOS9 では、App Transport Security(ATS) という機構が有効になっていて、HTTP での接続ができません。そのため、サーバ側を HTTPS での通信ができるように対応するか、ATS を無効または一部無効にする必要があります。
File.plistとATSに関して(18725)|teratail
わからないようであれば、Google で App Transport Security のキーワードで検索してください。

レスポンスヘッダを見ると、JSON を受け取りたいのでしょうか。

HTTP/1.1 200 OK Server: nginx/1.4.6 (Ubuntu) Date: Tue, 01 Dec 2015 21:22:59 GMT Content-Type: application/json; charset=utf-8 Transfer-Encoding: chunked Connection: close X-Powered-By: PHP/5.5.9-1ubuntu4.11 "157563"

JSON の取り回しなども考えているのでしたら、AFNetworkingなどのライブラリを活用した方が楽かもしれません。ご検討ください。
AFNetworking/AFNetworking

投稿2015/12/01 22:28

izkn

総合スコア1698

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2015/12/02 03:51

ありがとうございます。そうでした。バージョンなどを明記すべきでした・・・。 久しぶりにXcodeを立ち上げたのですっかり抜け落ちておりました。申し訳ありませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問