每月自动下载 Linux Journal

作者:Mitch Frazier

有句老话说,“任何值得做的事情,都值得自动化”——或者类似的话。下载和阅读 Linux Journal 一直是值得做的事情,现在您可以使用我们新的 autolj 脚本来自动化这个过程,您可以在这里获取该脚本。

按照以下几个简单的步骤操作,您就可以轻松地每月下载 PDF(或 .epub 或 .mobi 文件)

1) 首先下载脚本并将其保存在某个位置;~/bin 是一个不错的选择。您可以随意命名它;不一定非得叫做 autolj.sh。

2) 打开终端/shell 并执行以下命令


$ chmod +x ~/bin/autolj.sh
$ ~/bin/autolj.sh --init
Enter the email and zip/postal code associated
with your Linux Journal subscription
EMail: you@example.com    # Enter your email address
Zip  : 88888              # Enter your zip/postal code
Creating initial config file.
Change your preferences in '/home/YOU/.config/autolj.cfg'.
Sample crontab configuration is in '/home/YOU/.config/autolj.crontab'.

如果您想每月从 cron 自动运行该脚本,您可以这样做


$ cp /home/YOU/.config/autolj.crontab mycrontab
$ crontab -l >>mycrontab
$ crontab <mycrontab
$ rm mycrontab

首次运行脚本时,请使用 --init 命令行选项来初始化脚本的配置文件。它将提示您输入与您的 Linux Journal 订阅关联的电子邮件和邮政编码。

它将该信息保存在名为 ~/.config/autolj.cfg 的文件中(如果您使用不同的名称保存脚本,则配置文件的基本名称将与您保存脚本时使用的名称相匹配)。

您可以使用手头上的任何文本编辑器编辑配置文件,或者您可以重新运行带有 --init 选项的脚本来重新创建配置文件(您所做的任何现有更改都将丢失)。

配置文件是一个 bash 脚本,由 autolj 脚本读取,因此请在文件中保持有效的 bash 语法。配置文件包含一些您可能也想更改的其他选项(每个选项的默认值如下所示)

  • doctypes — 指定要下载的文档类型(PDF、EPUB、MOBI)(doctypes="pdf")。
  • save_dir — 指定存储下载内容的目录(save_dir='$HOME/linuxjournal/issues')。
  • save_file — 指定下载文件的名称(save_file='LJ-$(printf %03d ${inum})-$year-$(printf %02d ${month}).${doc}')。
  • notify_msg — 指定在通知新下载时使用的消息(notify_msg='$(date +%B --date ${month}/1) ${year} Linux Journal ${doc^^} 已下载。')。
  • do_notify — 指定脚本是否应尝试通知您新的下载(do_notify=1)。

您可能已经注意到 save_dirsave_filenotify_msg 变量都用单引号括起来(这意味着当脚本读取配置文件时,它们引用的变量不会被求值)。相反,脚本在需要它们时才对它们进行求值。当字符串被求值时,将设置以下变量

  • inum — 期刊号。
  • month — 期刊月份(数字)。
  • year — 期刊年份。
  • doc — 文档类型(pdf、epub 或 mobi)。

通过在需要时求值字符串,您可以自定义下载位置以及文件命名方式。

以下是一些您可以执行的操作示例


# Download all types:
doctypes="epub mobi pdf"

# Organize downloads by document type:
#   $HOME/linuxjournal/epub   - epubs go here
#   $HOME/linuxjournal/mobi   - mobis go here
#   $HOME/linuxjournal/pdf    - pdfs go here
save_dir='$HOME/linuxjournal/${doc}'

# Organize downloads by month-year:
#   $HOME/linuxjournal/1-2018   - January
#   $HOME/linuxjournal/10-2018  - October
save_dir='$HOME/linuxjournal/${month}-${year}'
# Organize downloads by year-month (make sure month is 2 digits):
#   $HOME/linuxjournal/2018-01  - January
#   $HOME/linuxjournal/2018-10  - October
save_dir='$HOME/linuxjournal/${year}-$(printf %02d ${month})'

# Use the month name in the downloaded file:
#   Linux-Journal-January-2018.pdf
#   Linux-Journal-October-2018.pdf
save_file='Linux-Journal-$(date +%B ${month}/1)-$year.${doc}'

# Change the notification message.
notify_msg='The new LJ is here! The new LJ is here!
 ↪${month}-${year}-${doc}.'

# Disable notifications.
do_notify=0

如果您从 cron 运行脚本,并且您的系统可以将电子邮件发送到您监控的帐户,那么当脚本成功下载任何新期刊文件时,您将收到通知。

如果您的系统上安装了程序 notify-send,则脚本还将“尝试”在下载任何文件时向您的桌面发送通知(通知是指屏幕右下方弹出的窗口)。

我使用“尝试”这个词,是因为如果您从 cron 运行脚本,notify-send 可能无法工作。如果您想禁用 notify-send 的使用,请在配置文件中将 do_notify 设置为零。

如果您不一直保持系统运行,您还可以设置脚本在您每次登录时自动运行。

在结束之前还有一些注意事项

  • 您只能使用该脚本下载最新一期,因此请确保在下一期发布之前运行它。
  • XDG_CONFIG_HOME 变量会被识别:如果您设置了它,则配置文件、示例 crontab 和图像文件将存储在那里,而不是在 ~/.config 中。
  • 仔细检查我们生成的 crontab 文件,以确保它没有执行任何您不希望的操作。
  • 生成的 crontab 条目在午夜到凌晨 5:59 之间的随机时间运行,并且仅在每个月的前七天运行。
  • 如果您查看脚本,您会看到一大块可怕的 base64 编码数据。不要害怕;它只是一个 png 图像,保存在 ~/.config/autolj.png 中,notify-send 使用它在通知消息中放置图像。
  • 如果您更改了配置文件中的 save_dirsave_file 值,您可以使用 --no-download 选项运行脚本,跳过实际下载并生成一些调试输出,以查看目录和文件名是否如您所期望的那样生成。
""

图 1. 通知图像

就是这样!现在下载 Linux Journal 并让您的生活更自动化一点。

注意:下载后,请务必查看 README 文件以获取任何最新更新。

发送电子邮件至 ljauto@linuxjournal.com 以报告错误或如果您需要脚本方面的帮助。

Mitch Frazier 是 Emerson Electric Co. 的嵌入式系统程序员。自 2000 年代初期以来,Mitch 一直是 Linux Journal 的贡献者和朋友。

加载 Disqus 评论