2017-05-01 6 views
1

私はhttps://finance.yahoo.com/quotes/ ...株価情報とオプションデータを使用しています。 Safariブラウザでは、引き続きうまく動作します。私はNSURLSessionのdataTaskWithUrLとしてObjective Cアプリにも取り込みます。先週(2017年4月28日)、willPerformHTTPRedirectionを呼び出すことによって強制的にリダイレクトが開始されましたが、リダイレクトはループして「あまりにも多くのHTTPリダイレクト」エラーを生成します。Yahoo finance.yahoo.com/quotesがリダイレクトしています

誰にもこの問題の回避策がありますか?

+0

http://stackoverflow.com/questions/43838109/how-to-download-data-from-web-using-tr-and-td-tag-names – Slai

答えて

0

私はヤフーファイナンス、4月21日に、(4/8)「http://finance.yahoo.com/quote/AAPL/history?interval=1wk」すると

に(4/1)「http://finance.yahoo.com/q/hp?s=AAPL&g=w」 からインポート毎週の過去のデータを自分のウェブサイトのアドレスの形式を変更し、ことがわかりました異なった形で、株価記号&の間のいくつかの広告行を「日付/オープン...調整終了」の見出しと日付から金額までの列の数を除いて除きます。

5/5で、Yahoo Financeの履歴データがVBAプログラミングで開かれませんでした。 MSN、Google、マーケットウォッチ、&などの他の金融サイトは、同じVBAコードを使用して引き続きオープンします。

最後に、上記の新しいYahooリンクをスプレッドシートに貼り付けてリンクをクリックすると、WebページがAppleの一般的な概要サイトにリダイレクトされ、履歴データタブにはリダイレクトされません。

コードのいくつかを試してみますが、その後は、Investopediaに変更する予定です。

-1

他の2人の作業に基づいて、この問題の解決策があるようです。

  1. リダイレクト問題
  2. 作業クッキー/クラムの組み合わせの確立:実際にヤフーからの歴史的なデータをダウンロードする問題への2つの側面があります。

私のExcelスプレッドシートを使用し続けるために私を可能にし、関連するVBAコードが基づいているソリューション:

+1

この質問は、どのようにしてリダイレクトの問題を解決できるか、 ObjectiveCで書かれたアプリの問題を引き起こします。これは、Excel/VBAやあなたが投稿したいずれのリンクとも関係ないようです。リダイレクトの問題を解決する方法を示すコードが最初のリンクのgithub repoに埋め込まれている場合は、それを抽出してその方法について話し合ってください。 – Orphid

+0

私の貢献が価値があるとは思わないと申し訳ありません。しかし、多くの人々のダウンロードルーチンが壊れてしまったYahoo Finance Webサイトの変更については多くの問題が提起されていますが、どのソフトウェア環境でも解決策を提供する人はいません。私の場合、VBA-WebはMSXML2.XMLHTTPを使用しているときのリダイレクトの問題を克服しています。誰もこのスレッドで何らかの解決策を提案していなかったので、これは思考のための食糧を提供する積極的な貢献だと思った。おそらくあなたは良いアイデアを持っているでしょう。 – TimW

0

ここで私は最終的に思い付いたソリューションです書かれたティム・ホールの仕事:元NSURLRequestで

は、NSURLMutableRequestそれを作ると追加します。

[theRequest setValue:@"Mozilla......." forHTTPHeaderField:@"User-Agent"]; 

この「スプーフィングするブラウザ」は、多くの場合リダイレクトなしで動作します。しかし時にはリダイレクトがあります。そこで私もこの方法を追加しました:

- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task willPerformHTTPRedirection:(NSHTTPURLResponse *)redirectResponse newRequest:(NSURLRequest *)request completionHandler:(void (^)(NSURLRequest *))completionHandler{ 

を完了ハンドラで、私はtask.currentRequest valueForHTTPHeaderFieldを調べる:、別のブラウザに設定し、別のブラウザを使用して新しいNSURLRequestを生成します。それは働いているようだ。

関連する問題