如何使用微博自動(dòng)記錄俯臥撐個(gè)數(shù)
根據(jù)SMART原則我制定了2016年的目標(biāo)。每個(gè)月都有一個(gè)小目標(biāo),每個(gè)目標(biāo)都是specific(具體)、Measurable(可度量)、Attainable(可實(shí)現(xiàn))、Relevant(相關(guān)性)、Time-bound(時(shí)限)的。1月份的目標(biāo)是跑步200公里,其中包含4個(gè)半程馬拉松。1月底驗(yàn)收的時(shí)候發(fā)現(xiàn)這個(gè)目標(biāo)輕松達(dá)成,整個(gè)1月份我總共跑了220公里+,其中跑了4個(gè)半程馬拉松。而且第二次的馬拉松打破我的個(gè)人記錄,成績(jī)?yōu)?小時(shí)43分30秒,把我的個(gè)人最好成績(jī)提高了2分鐘。
2月份我的目標(biāo)的是做4000個(gè)俯臥撐+撰寫4篇技術(shù)博客。跑步的時(shí)候我可以使用跑步軟件(咕咚或者悅跑圈)來記錄我的跑步里程,而記錄俯臥撐雖然有一些現(xiàn)成的軟件(比如Push-Ups),但是我感覺太重量級(jí),想要一種輕量的方式來記錄。后來我想到了一種方式,只需在命令行終端輸入一條簡(jiǎn)單的命令,比如pushups 30,那么我的微博會(huì)自動(dòng)多出來一條博文,記錄我本次做了多少俯臥撐,本月已經(jīng)完成了多少俯臥撐,距離目標(biāo)還剩下多少俯臥撐。這樣子每做完一組,我只需敲一行命令就可以輕松記錄下來,并且還有廣大網(wǎng)友進(jìn)行監(jiān)督。
這個(gè)主意很好,可是怎么實(shí)現(xiàn)那?其實(shí)整個(gè)過程并不復(fù)雜,我周末花了兩個(gè)小時(shí)就完成了。新浪微博提供了一個(gè)微博開放平臺(tái),在微博開放平臺(tái)上其開放了一系列API,其中發(fā)送微博就屬于其中一個(gè)。我們只需把我們要發(fā)送的內(nèi)容組裝好,編寫程序調(diào)用其發(fā)送微博的API即可。
發(fā)送微博的API文檔在這里。通過文檔可以看出其實(shí)只要發(fā)送一個(gè)http請(qǐng)求,包含相應(yīng)的內(nèi)容就好。其中有兩個(gè)字段比較重要,一個(gè)是access token,一個(gè)是status。access token是認(rèn)證令牌,確定是哪個(gè)應(yīng)用向哪個(gè)微博發(fā)送內(nèi)容,status是需要推送的微博正文。
獲取access_token的過程比較復(fù)雜,需要你了解OAuth2.0認(rèn)證流程,詳情請(qǐng)看授權(quán)機(jī)制說明。簡(jiǎn)單來說就是用你的微博賬號(hào)登陸微博開放平臺(tái),注冊(cè)一個(gè)應(yīng)用,然后得到一個(gè)應(yīng)用Id,然后用該應(yīng)用Id調(diào)用相應(yīng)的API來授權(quán)訪問你的個(gè)人微博,最后得到一個(gè)access token。
如果調(diào)用這個(gè)API那?因?yàn)橹霸?jīng)寫過一個(gè)插件向微博推送我的博客信息,所以只需把相關(guān)代碼拿出來重用即可。相關(guān)代碼采用Ruby寫的。代碼如下:
WeiboPoster
require 'faraday' require 'yaml' require 'json' class WeiboPoster def initialize @weibo_config = YAML.load_file(File.expand_path(File.dirname(__FILE__) + '/weibo-config.yml')) @pushups = YAML.load_file(File.expand_path(File.dirname(__FILE__) + '/pushups.yml')) end def post_weibo(number) @number = number conn = Faraday.new(:url => "https://api.weibo.com") result = conn.post '/2/statuses/update.json', :access_token => @weibo_config['access_token'], :status => generate_post responseJSON = JSON.parse result.body if responseJSON['error_code'] puts 'post error:' + responseJSON['error'] else puts "post to weibo successfully" end end private def generate_post total = get_history total = total + @number.to_i number_rest = 4000 - total save_to_history total post_template = @weibo_config['post_template'].force_encoding("utf-8") post_template % {:number_done => @number, :total => total,:number_rest => number_rest} end def get_history @pushups['total'] end def save_to_history(total) @pushups['total'] = total File.open('pushups.yml','w') do |h| h.write @pushups.to_yaml end end end poster = WeiboPoster.new poster.post_weibo ARGV[0]
整個(gè)邏輯就是先從一個(gè)配置文件中讀出當(dāng)前完成的俯臥撐個(gè)數(shù),再配合通過命令行參數(shù)傳入的當(dāng)前組做的個(gè)數(shù),結(jié)合微博模板生成微博內(nèi)容,再調(diào)用API發(fā)送HTTP請(qǐng)求。
accecs token和微博模板存放在weibo-config.yml文件中。
weibo-config.yml
# Sina Weibo Post access_token: YOUR_ACCESS_TOKEN
post_template: 剛才做了%{number_done}個(gè)俯臥撐,2月份總共完成了%{total}個(gè)俯臥撐,距離4000個(gè)俯臥撐目標(biāo)還差%{number_rest}個(gè)
然后我在Rakefile中配置了一個(gè)任務(wù),用于調(diào)用WeiboPoster類。
Rakefile
require "rubygems" require "bundler/setup" require "stringex" desc "post pushups to weibo" task :pushups, :number do |t, args| args.with_defaults(:number => 50) number = args.number system "ruby post_weibo.rb " + number end
最后再用一個(gè)shell腳本封裝一下,支持shell調(diào)用。
pushups
#!/bin/sh rake pushups[$1]
OK這樣就齊活了。做完一組俯臥撐之后,只需在命令行輸入pushups 35,然后就可以看到我的微博多了一篇推文。
最終效果如下。
相關(guān)文章
shell 腳本中獲取命令的輸出的實(shí)現(xiàn)示例
本文主要介紹了shell 腳本中獲取命令的輸出的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02Shell實(shí)現(xiàn)的一些數(shù)學(xué)運(yùn)算自定義函數(shù)分享
這篇文章主要介紹了Shell實(shí)現(xiàn)的一些數(shù)學(xué)運(yùn)算自定義函數(shù)分享,本文的一些函數(shù)主要重寫了加減乘除算法,需要的朋友可以參考下2014-12-12shell腳本實(shí)現(xiàn)mysql定時(shí)備份、刪除、恢復(fù)功能
這篇文章主要介紹了shell腳本實(shí)現(xiàn)mysql定時(shí)備份、刪除、恢復(fù)功能,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-11-11