[[20200518154348]] 『WEBSERVICE関数の使い方』(ハシビロコウ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『WEBSERVICE関数の使い方』(ハシビロコウ)

WEBSERVICE関数を利用すると、エラーとなってしまいます。
下記のようにWEBSERVICE関数を紹介しているサイトの例を入力してもエラー表記になってしまいます。何を改善すればよいのでしょうか。

=WEBSERVICE("http://www.drk7.jp/weather/xml/13.xml")

< 使用 Excel:Excel2013、使用 OS:Windows10 >


 ↑その http://www.drk7.jp/weather/xml/13.xml は現在は存在しないのでエラーになります。
(tora) 2020/05/18(月) 16:52

このURL以外もなにいれてもエラーになります。
(ハシビロコウ) 2020/05/18(月) 17:48

例えばグーグルのURLいれてもエラーになります。

(ハシビロコウ) 2020/05/18(月) 18:07


 例えばこんなのでは?
 Yahoo!ニュース の主要 トピックスの rssが返ってきませんか?

 =WEBSERVICE("https://news.yahoo.co.jp/pickup/rss.xml")

 たぶん質問者さんの期待に応えるものではないとおもいますが。
(´・ω・`) 2020/05/18(月) 18:20

 あれ?質問者さんの
 =WEBSERVICE("http://www.drk7.jp/weather/xml/13.xml")
 の式を入力したら、ちゃんと返ってきますね。

 質問者さんのネット環境ははどうでしょうか?
 IEとかで
 http://www.drk7.jp/weather/xml/13.xml
 開いたら、表示されますか?

 PROXY ?
(´・ω・`) 2020/05/18(月) 18:25

WEBSERVICE関数は、普通のURLではなく、答えがXMLやJSONのように返ってくるようなものでなければ駄目です。
例えば、以下なら住所情報が返ってきます。
 =WEBSERVICE("http://zipcloud.ibsnet.co.jp/api/search?zipcode=1000000")

ただ、マクロと違い、可変部分があるならば、数式で全て編集しないといけないので、面倒ですよ? マクロでIEオブジェクトを操作する方が一般的だと思います。
(???) 2020/05/18(月) 18:35


(´・ω・`) さん

=WEBSERVICE("https://news.yahoo.co.jp/pickup/rss.xml")
もエラーになります。ネットは問題ないです。
エクセルの設定に問題がある気がするのですが・・・

(???)さん
=WEBSERVICE("http://zipcloud.ibsnet.co.jp/api/search?zipcode=1000000")
でもエラーになります。

URLの問題ではない気がします。

マクロを使用せずに外部データの出力しようとしています。
(ハシビロコウ) 2020/05/18(月) 18:41


 エラーになるというのは #Value になるということでいいですよね?
(´・ω・`) 2020/05/18(月) 19:51

私のところでもXMLが取得できています。

以下余談ですが。 
すでに指摘がありますように、ワークシート関数での使い途がよくわからないですね。
よほど簡単なWebAPIを想定しているのでしょうか。
 
結局のところ取得したXMLから情報を取り出すには、
XML関連のツールなり正規表現を使うなりする必要があり、
ワークシート関数だけではむずかしいのではないかという感じです。

(γ) 2020/05/18(月) 20:40


 >XMLから情報を取り出すには、
 FILTERXML関数というのがあるみたいですよ
 =FILTERXML(WEBSERVICE("https://news.yahoo.co.jp/pickup/rss.xml"),"/rss/channel/item/title")
 とか
(´・ω・`) 2020/05/18(月) 21:11

ああ、そうなんですね。ありがとうございます。
(γ) 2020/05/18(月) 21:21

(´・ω・`) さん
エラーは#Valueになるということです。

簡単なWebAPIを使用します。
情報の抽出は問題ありません。

問題はwebservice関数がエラーになることだけです。
(ハシビロコウ) 2020/05/18(月) 21:41


 ネットで検索してもあまり情報ないですが
 webservice関数がうまくしかない場合として
 Proxy通してたら#Valueエラーになるという情報がありました

 proxyサーバー通してないですか?
(´・ω・`) 2020/05/18(月) 22:10


プロキシ経由しています。対処法は何がありますでしょうか。
(ハシビロコウ) 2020/05/18(月) 22:49

 すみませんが、私にはこれ以上はわかりません。
 Proxy通すとダメという情報も、私自身では確認できてないので、
 そうでないかもしれません
 IEで表示できてるなら出来ていいのにと思いますし。

 ちなみに、webservice関数と同様のこと、VBAでユーザ定義関数で書こうとすると、
 こんな感じになります。
 
 =HTTPGet("https://news.yahoo.co.jp/pickup/rss.xml")
 
 としたら、どうなるでしょうか? 

 Function HTTPGet(url)

   Const SXH_OPTION_IGNORE_SERVER_SSL_CERT_ERROR_FLAGS = 2
   Const SXH_SERVER_CERT_IGNORE_ALL_SERVER_ERRORS = 13056

   Set xHttp = CreateObject("MSXML2.ServerXMLHTTP")

   xHttp.Open "GET", url, True
   xHttp.setOption SXH_OPTION_IGNORE_SERVER_SSL_CERT_ERROR_FLAGS, SXH_SERVER_CERT_IGNORE_ALL_SERVER_ERRORS
   xHttp.send

   If xHttp.readyState <> 4 Then xHttp.waitForResponse 2  '3秒まってだめならタイムアウト

   HTTPGet = xHttp.responseText

   Set xHttp = Nothing

 End Function
(´・ω・`) 2020/05/18(月) 23:45

(´・ω・`)さん
ありがとうございます。
しかし、vbaでやるのはよいのですが、作成者不在時に、詳しくないものは編集できないという欠点があります。
そのため、マクロなしで誰でもわかりそうなweb service関数を使用したいと考えています。

もう少し原因を調べようと思います。
(ハシビロコウ) 2020/05/19(火) 00:07


 いや、使う使わないは自由だけど、
 VBAの方からだと、PROXY経由でGetできるのかを確かめたいんで、
 いっぺんやってみてもらえませんかね?
(´・ω・`) 2020/05/19(火) 00:17

(´・ω・`)さん
VBAでもだめでした
(ハシビロコウ) 2020/05/19(火) 08:57

 ではやはり、PROXYの問題のように思うので、
 私にはこれ以上わかりません。

 ちなみに、VBAでPROXYを通すには以下のようにすればいいようです。
 環境がないのでテストしてないですけど、参考に。

 Function HTTPGet(url)
   Const SXH_OPTION_IGNORE_SERVER_SSL_CERT_ERROR_FLAGS = 2
   Const SXH_SERVER_CERT_IGNORE_ALL_SERVER_ERRORS = 13056
   Set xHTTP = CreateObject("MSXML2.ServerXMLHTTP")
   xHTTP.Open "GET", url, True

   xHTTP.setProxy 2, "proxy.srv:port"              ' プロキシサーバー
   xHTTP.setProxyCredentials "User", "Password"    ' 認証情報

   xHTTP.setOption SXH_OPTION_IGNORE_SERVER_SSL_CERT_ERROR_FLAGS, SXH_SERVER_CERT_IGNORE_ALL_SERVER_ERRORS
   xHTTP.send
   If xHTTP.readyState <> 4 Then xHTTP.waitForResponse 2  '3秒まってだめならタイムアウト
   HTTPGet = xHTTP.responseText
   Set xHTTP = Nothing
 End Function
(´・ω・`) 2020/05/19(火) 09:37

(´・ω・`) さん

問題が明らかにして頂きありがとうございます。
(ハシビロコウ) 2020/05/19(火) 09:55


プロキシ経由していても、Windows10ではWindowsのプロキシとIE、Edgeのプロキシ設定は共通になっているので、Excelでも普通に通るはずです。(ただし、コマンドプロンプトからnetsh winhttp show proxyとしてもプロキシ無しなのに、Windowsの設定画面ではプロキシオンになっている場合もあるので、環境次第)

(´・ω・`)さんも書いていた事ですが、駄目だというURLは、IEとEdgeに直接入れて表示できますか? これができないと、Excelでもできません。
(???) 2020/05/19(火) 10:32


(???)
どちらに直接入れても表示できます。
(ハシビロコウ) 2020/05/19(火) 13:08

ブラウザはプロキシが通っていて、Excelだと通らない、という状態ですね。
ならば、Windowsにプロキシ設定すれば解決するのではないかと思います。

コマンドプロンプトを管理者モードで起動し、以下を入力してみてください。

 netsh winhttp show proxy

おそらく、プロキシサーバなしと表示されるのではないでしょうか。
次に、以下でIEのプロキシ設定をWindowsに反映します。

 netsh winhttp import proxy source = ie

この後、ExcelでWEBSERVICE関数を試してみてください。

Windowsのプロキシ設定を消すには、以下。

 netsh winhttp reset proxy

Windowsにプロキシ設定しても症状が変わらないのであれば、会社がフィルタしてアプリを制限しているのかも知れません。 第3者では構成を知れないので、会社の情報処理部門に相談するしかないでしょうね。
(???) 2020/05/19(火) 13:39


(???)さん
回答ありがとうございます。
試してみます。

(ハシビロコウ) 2020/05/19(火) 17:42


netsh winhttp import proxy source = ie
のプロキシ設定できませんでした。
(ハシビロコウ) 2020/05/20(水) 10:22

できない、ではなくて、エラーなったのならば、そのメッセージを書いてください。 できない、だけでは原因は判りませんよ?

 > コマンドプロンプトを管理者モードで起動し、以下を入力してみてください。 
ここが重要で、管理者モードでないと設定変更できないのですが、ここは手順通りにしましたか?

(???) 2020/05/20(水) 13:45


(???)さん
不十分な回答で申し訳ありません。netsh winhttp import proxy source = ieを入力したところ、
現在の WinHTTP プロキシ設定: 直接アクセス (プロキシ サーバーなし)。
と表示されます。

管理者モードで実行しています。

(ハシビロコウ) 2020/05/20(水) 14:08


IEにはプロキシ設定していない、という事ですね。 設定がないものをインポートしようとしてもできない、というエラーです。 ということは、プロキシサーバを通さずにブラウザはWebアクセスできているのに、Excelは締め出されている事になります。

WEBSERVICE関数は駄目、IEオブジェクトも駄目ということなので、関数やマクロの問題ではなく、ネットワーク環境の問題だと思われます。 先に書いた通り、ネットワークを管理している部門に相談するしかないでしょう。
(???) 2020/05/20(水) 17:44


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.