0

我正在尝试自动下载我们学校的天气数据。我不是一个技术高超的人,但我想我是学校里最好的。我的问题是尝试将时间变量插入网址。这是我到目前为止所做的。

目前这有效:

curl -o /Library/Server/Web/Data/Sites/wupmooksgmol.ca/weather/"$(date +%Y)"/"$(date +%Y-%m-%d)".weather.csv 'http://www.wunderground.com/weatherstation/WXDailyHistory.asp?ID=IBRITISH322&day=16&month=1&year=2015&graphspan=day&format=1'

但是,在网址中,它只下载了 2015 年 1 月 16 日的天气数据。我想将当前日期、月份和年份放入网址本身。因此,它会在每天 23:57 下载当天的天气数据。我在以下方面尝试了很多变化,但没有运气:

curl -o /Library/Server/Web/Data/Sites/wupmooksgmol.ca/weather/"$(date +%Y)"/"$(date +%Y-%m-%d)".weather.csv 'http://www.wunderground.com/weatherstation/WXDailyHistory.asp?ID=IBRITISH322&day=“$(date +%d)”&month=“$(date +%m)”&year=“$(date +%Y)”&graphspan=day&format=1'

我还尝试了这个 shell 脚本的多种变体:

#!/bin/bash

day=$(date '+%d')
month=$(date '+%m')
year=$(date '+%Y')
ymd=$(date '+%Y-%m-%d')

curl -o /Library/Server/Web/Data/Sites/wupmooksgmol.ca/weather/“$year"/"$ymd".weather.csv 'http://www.wunderground.com/weatherstation/WXDailyHistory.asp?ID=IBRITISH322&day=“$day”&month=“$month”&year=“$year”&graphspan=day&format=1'

感谢您的任何帮助,您可以提供。

4

2 回答 2

0

我认为您可能只是遇到了如何包装字符串的问题——特别是您使用的引号类型。我有一段时间没有使用 OSX,但它与大多数 Linux 发行版中使用的 shell基本相同(如果不同的话)。通常,双引号内的任何内容都允许变量替换,但单引号内的任何内容都将完全按照字面意思(没有替换)。

尝试将 URL 用双引号而不是单引号括起来,然后不要将变量括在该字符串中的引号中。所以:

curl "http://www.wunderground.com/weatherstation/WXDailyHistory.asp?ID=IBRITISH322&day=$(date +%d)&month=$(date +%m)&year=$(date +%Y)&graphspan=day&format=1"

自己测试上面的内容似乎得到了当前的结果,但是我从来没有使用过这个 API,所以我不确定我在看什么。^_^ 不过,我可以读取日期,结果是从今天开始的。

将来,与其向网站发送可能是虚假请求的垃圾邮件,不如尝试使用echo. 这只会将您的字符串输出到终端,因此您可以在不发送请求的情况下对其进行调试。一旦通过测试得到正确的输出echo,然后尝试将其用作curl. 此技术对于调试您尝试在 shell 脚本中组装的任何输入替换非常有用。

于 2015-01-18T01:19:13.257 回答
0

我认为你需要这个:

#!/bin/bash

day=$(date '+%d')
month=$(date '+%m')
year=$(date '+%Y')
ymd=$(date '+%Y-%m-%d')

curl -o weather.csv "http://www.wunderground.com/weatherstation/WXDailyHistory.asp?ID=IBRITISH322&day=${day}&month=${month}&year=${year}&graphspan=day&format=1"

我对报价的看法是这样的。如果你用单引号括起来,没有什么会被扩展,也没有必要在其中放置变量。如果您使用双引号,变量将被扩展,并且带有空格的内容将“保持在一起”并被视为单个参数。不是很技术,但它确实有效。

于 2015-01-18T12:03:03.070 回答