如何为具有多个来自CSV变量的多个API调用设计“ Invoke-WebRequest”? (电源外壳)

时间:2018-12-24 02:35:43

标签: json api powershell csv call

我试图调用Dark Sky API来获取数百行CSV文件中每个位置的天气预报数据,并将其写入文本文件。这是CSV的前5行的示例...

ip              city        region_code zip     latitude  longitude
75.161.17.209   Albuquerque NM          87114   35.1868  -106.6652
68.55.28.227    Plymouth    MI          48170   42.3688  -83.4799
72.95.198.227   Homestead   PA          15120   40.3926  -79.9052
68.180.94.219   Normal      IL          61761   40.5124  -88.9883
75.132.165.245  Belleville  IL          62226   38.5352  -90.0006

uri的格式如下...

https://api.darksky.net/forecast/[APIKey]/$latitude ,$longitude ,$ForcastTime ?exclude=currently,minutely,hourly,flags&units=us

此uri中有3个变量。 $ latitude,$ longitude和$ ForecastTime。 $ ForecastTime很简单,因为所有请求都相同,因此我已经将其定义为...

$ForecastTime = Get-Date -Date $(Get-Date).AddDays(1) -Format yyyy-MM-ddTHH:mm:ss

...为了给我明天的预报信息。这是Dark Sky要求的格式,并且效果很好。

我在将$ latitude和$ longitude定义为变量并格式化Invoke-WebRequest时遇到麻烦,因此我无法提取整个位置字符串的天气数据。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

以下是Invoke-RestMethod的一些示例代码,但是您也可以使用Invoke-WebRequest。我喜欢使用Invoke-RestMethod与API进行交互。请尝试让我知道它是否有效。

$ForecastTime = Get-Date -Date $(Get-Date).AddDays(1) -Format yyyy-MM-ddTHH:mm:ss;
Import-CSV './input.csv' | ForEach-Object {
     $result = Invoke-RestMethod -Uri "https://api.darksky.net/forecast/$apiKey/$_.latitude,$_.longitude,$ForcastTime?exclude=currently,minutely,hourly,flags&units=us"
}

PS:如果CSV列名称中包含空格,那么您可以将列读为$_.'Region Code'