使用微博自動記錄俯卧撐個數


根據SMART原則我制定了2016年的目標。每個月都有一個小目標,每個目標都是specific(具體)、Measurable(可度量)、Attainable(可實現)、Relevant(相關性)、Time-bound(時限)的。1月份的目標是跑步200公里,其中包含4個半程馬拉松。1月底驗收的時候發現這個目標輕松達成,整個1月份我總共跑了220公里+,其中跑了4個半程馬拉松。而且第二次的馬拉松打破我的個人記錄,成績為1小時43分30秒,把我的個人最好成績提高了2分鍾。

2月份我的目標的是做4000個俯卧撐+撰寫4篇技術博客。跑步的時候我可以使用跑步軟件(咕咚或者悅跑圈)來記錄我的跑步里程,而記錄俯卧撐雖然有一些現成的軟件(比如Push-Ups),但是我感覺太重量級,想要一種輕量的方式來記錄。后來我想到了一種方式,只需在命令行終端輸入一條簡單的命令,比如pushups 30,那么我的微博會自動多出來一條博文,記錄我本次做了多少俯卧撐,本月已經完成了多少俯卧撐,距離目標還剩下多少俯卧撐。這樣子每做完一組,我只需敲一行命令就可以輕松記錄下來,並且還有廣大網友進行監督。

這個主意很好,可是怎么實現那?其實整個過程並不復雜,我周末花了兩個小時就完成了。新浪微博提供了一個微博開放平台,在微博開放平台上其開放了一系列API,其中發送微博就屬於其中一個。我們只需把我們要發送的內容組裝好,編寫程序調用其發送微博的API即可。

發送微博的API文檔在這里。通過文檔可以看出其實只要發送一個http請求,包含相應的內容就好。其中有兩個字段比較重要,一個是access token,一個是status。access token是認證令牌,確定是哪個應用向哪個微博發送內容,status是需要推送的微博正文。

獲取access_token的過程比較復雜,需要你了解OAuth2.0認證流程,詳情請看授權機制說明。簡單來說就是用你的微博賬號登陸微博開放平台,注冊一個應用,然后得到一個應用Id,然后用該應用Id調用相應的API來授權訪問你的個人微博,最后得到一個access token。

如果調用這個API那?因為之前曾經寫過一個插件向微博推送我的博客信息,所以只需把相關代碼拿出來重用即可。相關代碼采用Ruby寫的。代碼如下:

WeiboPoster
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
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] 

整個邏輯就是先從一個配置文件中讀出當前完成的俯卧撐個數,再配合通過命令行參數傳入的當前組做的個數,結合微博模板生成微博內容,再調用API發送HTTP請求。

accecs token和微博模板存放在weibo-config.yml文件中。

weibo-config.yml
1
2
3
# Sina Weibo Post access_token: YOUR_ACCESS_TOKEN post_template: 剛才做了%{number_done}個俯卧撐,2月份總共完成了%{total}個俯卧撐,距離4000個俯卧撐目標還差%{number_rest}個 

然后我在Rakefile中配置了一個任務,用於調用WeiboPoster類。

Rakefile
1
2
3
4
5
6
7
8
9
10
11
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 

最后再用一個shell腳本封裝一下,支持shell調用。

pushups
1
2
#!/bin/sh rake pushups[$1] 

OK這樣就齊活了。做完一組俯卧撐之后,只需在命令行輸入pushups 35,然后就可以看到我的微博多了一篇推文。

最終效果如下。

我的微博地址:@無敵北瓜


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM