程序目录
1/每天给自己发一句鸡汤名言. 1
2/ 定位天气(实时). 2
3/天气预报. 3
4/垃圾邮件. 4
5/艺术集(好玩的小程序). 7
【项目名称】Shell编程-脑洞实验-脚本小程序
【背景技术】
1/每天给自己发一句鸡汤名言
这个算是看sed,wget的工具使用想到的,然后查了一些获取网页的方法,与免费的api。
2/定位天气(实时)
看到了一篇博客
https://blog.csdn.net/guwuchangtian/article/details/76458605#commentBox
觉得可以试试,因为是从api中获取json文本。然后通过分割json文本来显示需要的信息。但是存在几个问题
①http://www.weather.com.cn/data/sk/101270106.html这个是一个已经不更新的api,而且其json文本结构十分简单所以才可以用文章中的sed字符定位,不适合日常生活
②如上图所示,信息量实在是太少了。而且已经停止更新了
文章的代码与结果:
#my first shell script
#edit by lixiang in 2017-7-31
echo '-----------------------------------------------'
echo "|||||hello,user!"
echo "|||||today is" `date`
json=`curl -s http://www.weather.com.cn/data/sk/101270106.html`
#echo $json
city=`echo $json | sed 's/.*city":"//g'| sed 's/","cityid.*$//g'`
temp=`echo $json | sed 's/.*temp":"//g'| sed 's/","WD.*$//g'`
wd=`echo $json | sed 's/.*WD":"//g'| sed 's/","WS.*$//g'`
ws=`echo $json | sed 's/.*WS":"//g'| sed 's/","SD.*$//g'`
echo '|||||you are now at '$city','$temp'℃,'$ws$wd'.'
echo '-----------------------------------------------'
3/天气预报
其灵感来源是这篇文章和我自己找到的免费api
https://www.sojson.com/blog/305.html
其中101190101是南京的城市id
这是一个比较复杂的json文本如果你用在线分割器是这样:(部分)
4/垃圾邮件
这个灵感来源于和同学(多特球迷)在德甲最后一轮的争执,作为拜仁球迷当然要小小报复一下,那什么让他崩溃呢,那当然是给他发各种有意思的拜仁加油口号。网上各种的发邮件文章,都不行,因为腾讯的发送端服务器ssmtp端口号是465不是25,所以例如这样的文章,都是在瞎扯。。。
5/艺术集(好玩的小程序)
源自知乎文章,想要尝试一些有意思的脚本
https://zhuanlan.zhihu.com/p/51904179
【项目目的】
1/每天给自己发一句鸡汤名言
2/定位天气(实时)
3/天气预报
4/垃圾邮件
5/艺术集(好玩的小程序)
【技术解决方案】
1/每天给自己发一句鸡汤名言
保存输出结果(wget),将URL状态消息保存在了check_url
判断是否获取成功
将网页信息保存在 quote.log里
去除HTML标签
使用当前日期作为搜索关键词
删除多余的”>"
只保留一条鸡汤句子
删除 
2/定位天气(实时)
https://www.ibm.com/developerworks/cn/linux/1612_chengg_jq/index.html
3/天气预报
4/垃圾邮件
https://askubuntu.com/questions/12917/how-to-send-mail-from-the-command-line
因为我的slogan是一行一行不一样的,所以每次发邮件内容是第i行的内容,加入到4.txt里方便后面无需输入模板
这样无需多输入模板:
To: 目的@163.com
From: 发送@qq.com
Subject: hey my friend
删除4.txt最后一行的内容,这样下次的发送内容不会和上一次重复。
5/艺术集(好玩的小程序)
安装与配置即可。
【具体实施】
#!/bin/bash
#
quote_url=http://www.quotationspage.com/qotd.html
check_url=$(wget -nv --spider $quote_url 2>&1)
if [[ $check_url == *error404* ]]
then
echo "Bad web address"
echo "cannot link"
echo "exiting ..."
exit
fi
wget -o quote.log -O Duote.html $quote_url
sed 's/<[^>]*//g' Duote.html|
grep "$(date +%B' '%-d,' '%Y)" -A2|
sed 's/>//g'|
sed '/ /{n ; d}' |
gawk 'BEGIN{FS=" "} {print $1}'|
tee daily_quote.txt > /dev/null
tail -n 2 daily_quote.txt
exit
效果图:
创建1.txt(预写好邮件格式)
To:目的@163.com
From: 发送方@qq.com
Subject: weather
vim 11.sh
tail -n2 daily_quote.txt >> 1.txt
ssmtp 目的@163.com < 1.txt
vim 2.sh
#!/bin/bash
#天气更新+tips
echo '-----------------------------------------------'
echo " hello,user "
echo "today is" `date`
curl -s http://t.weather.sojson.com/api/weather/city/101190101>>json.txt
city=`jq .cityInfo.city json.txt`
update=`jq .cityInfo.updateTime json.txt`
temp=`jq .data.wendu json.txt`
shidu=`jq .data.shidu json.txt`
pm25=`jq .data.pm25 json.txt`
pm10=`jq .data.pm10 json.txt`
quality=`jq .data.quality json.txt`
tips=`jq .data.ganmao json.txt`
echo '你现在在'$city ","'我们的天气更新时间 :'$update
echo '现在温度是:'$temp '湿度是' $shidu
echo 'pm2.5是:'$pm25 ',' 'pm10是:' $pm10 ',' '空气质量是:' $quality
echo '温馨小贴士: '$tips
rm json.txt
exit
由于api是每三小时刷新一次,所以另一天是不同的:
vim 3.sh
#!/bin/bash
#天气更新+tips
touch json.txt
echo '-----------------------------------------------'
echo " hello,user "
echo "*****天气预报*****"
curl -s http://t.weather.sojson.com/api/weather/city/101190101>>json.txt
for (( i = 1; i < 15; i++))
do
high=`jq .data.forecast[$i].high json.txt`
low=`jq .data.forecast[$i].low json.txt`
ymd=`jq .data.forecast[$i].ymd json.txt`
fx=`jq .data.forecast[$i].fx json.txt`
f1=`jq .data.forecast[$i].fl json.txt`
type=`jq .data.forecast[$i].type json.txt`
notice=`jq .data.forecast[$i].notice json.txt`
echo '预告日期:'$ymd
echo '最高温度:'$high '最低温度:' $low
echo '风:'$fx ',' '级数是:' $f1 ',' '天气:' $type
done
rm json.txt
exit
这个也是不断在更新的:
vim slogan.txt
sudo apt-get install ssmtp
gksu gedit /etc/ssmtp/ssmtp.conf
vim /etc/ssmtp/ssmtp.conf
root=发送方@qq.com
mailhub=smtp.qq.com:465
rewriteDomain=qq.com
hostname=发送方@qq.com
AuthUser=发送方@qq.com
AuthPass=密匙
FromLineOverride=YES
UseTLS=YES
To: 接收方@163.com
From: 发送方@qq.com
Subject: hey myfriend
for (( i = 1; i < 7; i++))
do
sleep 1m
head -n +$i slogan.txt| tail -1 >> 4.txt
ssmtp 接收方@163.com < 4.txt
sed -i '$d' 4.txt
done
至于好玩的艺术集请看最前面的知乎链接!