我很难得到一个使用wget作为launchd作业运行的bash脚本。该脚本旨在自动下载每日纽约时报填字游戏。请注意,您需要订阅(USERNAME和PASSWORD)才能使其正常工作。
原始脚本(生活在http://web.mit.edu/lizdenys/Public/crossword)效果很好,是bash脚本的一个令人印象深刻的教育示例(至少对我而言)。这是原始的。我修改它以供我使用,包括用户,传递和评论下载除PDF版本之外的任何步骤(我喜欢铅笔和纸)。
- = - = - = - = - = - =开始bash脚本 - = - = - = - = - = - =
#!/bin/bash
# crossword,
# a wget-based nytimes crossword downloader
# Liz A. Denys (liz@lizdenys.com)
# Last updated on May 13, 2015
# This script downloads today's New York Times daily crossword. To
# use, you must change the email and password information below so
# that it corresponds to your premium New York Times account.
# Get the current date.
puzdate=`date "+%Y-%m-%d"`
pdfdate=`date "+%b%d%y"`
# Get the login page.
wget --no-check-certificate https://myaccount.nytimes.com/auth/login \
-O login.html &>/dev/null
# Scrape token and expires values so wget can auth.
token=`grep token login.html | sed -e 's/^.*value="\([0-9a-f]\+\)".*$/\1/'`
expires=`grep expires login.html | sed -e 's/^.*value="\([0-9a-f]\+\)".*$/\1/'`
# Log in with password. Note: this does not work without replacing
# username and password information.
wget --post-data \
"userid=USERNAME%40DOMAIN.COM&password=PASSWORDVALUE&is_continue=false&remember=true&token=$token&expires=$expires" \
--save-cookies=cookies.txt --keep-session-cookies --no-check-certificate \
-O /dev/null https://myaccount.nytimes.com/auth/login &>/dev/null
# Download puzzle in .pdf and .puz formats.
wget --load-cookies=cookies.txt \
http://www.nytimes.com/svc/crosswords/v2/puzzle/print/$pdfdate.pdf \
&>/dev/null
wget --load-cookies=cookies.txt \
http://www.nytimes.com/svc/crosswords/v2/puzzle/daily-$puzdate.puz \
&>/dev/null
# Clean up workspace.
rm cookies.txt
rm login.html
- = - = - = - = - = - =结束bash脚本 - = - = - = - = - = - =
我进行了必要的编辑,脚本从第一次尝试的命令行运行!
由于我每天都不能访问互联网,因此(据我所知)谜题在它们出现后的第二天就不再可用了,我决定每天都要自动完成这项工作。我已经使用了cron(用于Sparcstation上的增量备份),没有任何问题(使用make来选择要写入磁带的文件 - 显示我的年份),但是不,Apple希望我使用launchd。我总是很乐意学习一些新的和有用的东西,所以我的任务就是充分了解launchd和plists来完成这项非常简单的工作。不是这样!!
这是失败的许多plist之一:
- = - = - = - = - = - =开始.plist文件 - = - = - = - = - = - =
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>local.me.nytxwd</string>
<key>OnDemand</key>
<true/>
<key>ProgramArguments</key>
<array>
<string>/bin/sh</string>
<string>/Users/me/Documents/misc/nytimes_xword/nytimes_puzzle_dl4.sh</string>
</array>
<key>StandardErrorPath</key>
<string>/Users/me/Documents/misc/nytimes_xword/err</string>
<key>StandardOutPath</key>
<string>/Users/me/Documents/misc/nytimes_xword/tmp</string>
<key>WorkingDirectory</key>
<string>/Users/me/Documents/misc/nytimes_xword/</string>
</dict>
</plist>
- = - = - = - = - = - =结束.plist文件 - = - = - = - = - = - =
以下是我的观察:
-script从命令行运行正常(带有必要的mod) 从launchd(退出1)作为每用户作业(〜/ Library / LaunchAgents /)运行时,-script失败。系统日志显示grep查找并包含两个基本数据位的文件永远不会写入目标目录(&#34; grep token login.html - 没有这样的文件&#34;)。
我最初尝试在每天0900作为StartCalendarInterval作业运行,但是当失败时,我使用launchctl load / unload切换到OnDemand进行调试。我尝试过的事情:
在plist中指定路径(错误,输出,工作目录) - 没有帮助
更改目标目录的所有权和权限。 - 没有帮助
将脚本中的路径更改为绝对路径(no~,no $ HOME,no。,no relative)。 - 没有帮助 https://myaccount.nytimes.com/auth/login \ -O /Users/me/Documents/misc/nytimes_xword/login.html& amp;&gt; / dev / null&gt;
我已经阅读了launchd,launchctl,launchd.plist的手册页,没有任何顿悟。
我已经搜索了launchd / bash / wget的每一个组合并学习了一些东西,但仍然没有成功。
我举了一个例子 http://www.mactech.com/articles/mactech/Vol.21/21.06/launchd/index.html 它工作了!!但是,它没有说明如何将文本文件写入和读取到用户目录。
Mac OS X 10.5.8,如果重要的话。
我知道这比这里提出的典型问题要长一些,但我想避免显而易见的问题#34;你试过这个问题&#34;的问题。
我假设一个大师将用一个简单而明显的解决方案揭示launchd的魔力。好吧,至少我会继续推出第2步。
谢谢, JLH
答案 0 :(得分:0)
我有同样的问题。我用curl
代替了它。
wget http://opendata-download-metobs.smhi.se/api/version/1.0/parameter/2/station/178970/period/corrected-archive/data.csv
curl -C - -o data.csv http://opendata-download-metobs.smhi.se/api/version/1.0/parameter/2/station/178970/period/corrected-archive/data.csv
第一行在终端上为我工作但我必须在我的脚本版本中使用第二行。一件好事是curl
允许我指定一个文件名,wget
拒绝这样做。