2015-01-18 1 views
0

Я пытаюсь автоматизировать загрузку данных о погоде в нашу школу. Я не большой технологический парень, но я лучший в школе, я полагаю. Моя проблема заключается в том, чтобы вставить временные переменные в веб-адрес. Вот что я сделал до сих пор.сценарий терминала/оболочки: добавление переменной в веб-адрес - OS X

В настоящее время это работает:

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' 

Но, в адрес веб-сайта, он только загружая данные о погоде 16 января 2015 года. Я хочу разместить текущий день, месяц и год в самом веб-адресе. Таким образом, в 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' 

Я также попытался многочисленные вариации этого сценария оболочки:

#!/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' 

Спасибо за любую помощь вы можете предоставить.

ответ

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" 

Как я думаю о кавычках, как это. Если вы окружаете материал одинарными кавычками, ничто не будет расширяться, и в них нет смысла вводить переменные. Если вы используете двойные кавычки, переменные будут расширены, а вещи с пробелами будут получать «, удерживаемые вместе» и обрабатываются как один параметр. Не очень технический, но он работает.

+0

Отлично. Это сработало хорошо. Благодаря!! – iQuestion

0

Возможно, у вас может возникнуть проблема с тем, как вы обертываете строку - в частности, виды кавычек, которые вы используете. Я не использовал OSX через некоторое время, но это в основном то же самое (если не ) оболочка, которая используется в большинстве дистрибутивов Linux. В общем, что-либо в двойных кавычках допускает переменную замену, но что-либо внутри одинарных кавычек будет взято абсолютно буквально (без подстановок).

Попробуйте обернуть 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, так что я не уверен, что я смотрю на.^_^Я могу прочесть дату, и результаты с сегодняшнего дня.

В будущем, вместо того, чтобы спамить сайт с возможными ложными запросами, попробуйте проверить синтаксис URL с помощью echo. Это просто выводит вашу строку на терминал, поэтому вы можете отлаживать ее без отправки запроса. Как только вы получите результат, выглядящий правильно, проверив echo, попробуйте использовать его в качестве адресата для curl. Эта методика полезна для отладки любой подстановки замещения, которую вы пытаетесь собрать в сценарии оболочки.

+0

Отлично. Это сработало хорошо. Однако сценарий оболочки более полезен, поэтому я собираюсь с этим справиться. – iQuestion

+0

@iQuestion Счастливые помочь. Для справки в будущих сценариях оболочки попробуйте прочитать отличную страницу руководства для 'bash', введя **' man bash' ** в командной строке. В дополнение к замене переменных он обсуждает другие полезные функции языка сценариев, которые позволяют вам создавать довольно сложную логику управления. – zerobandwidth