69659


Google Apps Scriptについて

<https://tonari-it.com/gas-api-weather/>  
上記、Webサイトを参考にJSONデータを配列に格納し、ログを出力しようとしましたが上手くいきません。  
エラー内容は以下になります。

[code]

    SyntaxError: Unexpected token < in JSON at position 4（行 5、ファイル「weatherForecast」）
    
[/code]

エラー内容を読むと、5行目の書き方に誤りがありますが、「<」の意味がわかりません。  
自分で長時間調べてみましたが、お手上げ状態です。ご教示お願い致します。  
[![画像の説明をここに入力](https://i.stack.imgur.com/rXRhx.png)](https://i.stack.imgur.com/rXRhx.png)

[code]

    function weatherForecast() {
    
    var response = UrlFetchApp.fetch('http://weather.livedoor.com/forecast/webservice/json/v1?city=130010'); //URL+cityID
    
    var json=JSON.parse(response.getContentText());
    
    Logger.log(json['title']);
    Logger.log(json['description']);
    Logger.log(json['forecasts']);
    
    }
    
[/code]


CC BY-SA 4.0
2020-08-18T09:51:20.460
69657
2020-08-18T10:30:32.193
41534
question
google-apps-script
SyntaxError: Unexpected token < in JSON at position 4


<http://weather.livedoor.com/forecast/webservice/json/v1?city=130010>  
に実際にアクセスしてみましょう。

<http://www.livedoor.com/?city=130010>  
にリダイレクトされてしまいますね。そしてWebページにおそらくライブドアのトップページが表示されています。つまりHTMLが返ってきてます。

ということで、 `response.getContentText()`
で本来JSONが取得できるはずだったのですが、HTMLを取得してしまっているようです。

HTMLはJSONではありません。HTMLには`<`が含まれています。これが`SyntaxError: Unexpected token < in
JSON`の原因です。

では、どうしてJSONではなくてリダイレクトされてHTMLが返ってきてるのでしょう？気になって調べてみました。サービスが終了しているからだと思います。

[天気情報 ヘルプ - livedoor ヘルプ](https://help.livedoor.com/weather/index.html)

> 2020年7月31日（金）14:00 をもちまして、「livedoor 天気」のサービス提供を終了いたしました。

終了したサービスを使うことはできません。

参考にされているページ [【Google Apps Script】天気予報をWeb APIで取得する方法](https://tonari-
it.com/gas-api-weather/) にJSONが載っています。

引用:

[code]

    {“coord”:
    {“lon”:145.77,”lat”:-16.92},
    “weather”:[{“id”:803,”main”:”Clouds”,”description”:”broken clouds”,”icon”:”04n”}],
    “base”:”cmc stations”,
    “main”:{“temp”:293.25,”pressure”:1019,”humidity”:83,”temp_min”:289.82,”temp_max”:295.37},
    “wind”:{“speed”:5.1,”deg”:150},
    “clouds”:{“all”:75},
    “rain”:{“3h”:3},
    “dt”:1435658272,
    “sys”:{“type”:1,”id”:8166,”message”:0.0166,”country”:”AU”,”sunrise”:1435610796,”sunset”:1435650870},
    “id”:2172797,
    “name”:”Cairns”,
    “cod”:200}
    
[/code]

ですので、これを使って下記のようにすると、すこし体験した気持ちになれると思います。  
（下記のコードでは上記のダブルクォートが `“`や`”`になっているのを私のほうで、`"`になおしています）

[code]

    var text = '{"coord":{"lon":145.77,"lat":-16.92},"weather":[{"id":803,"main":"Clouds","description":"broken clouds","icon":"04n"}],"base":"cmc stations","main":{"temp":293.25,"pressure":1019,"humidity":83,"temp_min":289.82,"temp_max":295.37},"wind":{"speed":5.1,"deg":150},"clouds":{"all":75},"rain":{"3h":3},"dt":1435658272,"sys":{"type":1,"id":8166,"message":0.0166,"country":"AU","sunrise":1435610796,"sunset":1435650870},"id":2172797,"name":"Cairns","cod":200}';
    var json = JSON.parse(text);
    
[/code]


CC BY-SA 4.0
2020-08-18T09:57:28.347
69659
2020-08-18T10:30:32.193
2020-08-18T10:30:32.193
9008
9008
69657
answer