使用微博自动记录俯卧撑个数

根据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,然后就可以看到我的微博多了一篇推文。

最终效果如下。

我的微博地址:@无敌北瓜

时间: 2024-10-04 11:25:53

使用微博自动记录俯卧撑个数的相关文章

UITableViewCell之微博篇

微博篇 本应用所涉及的知识点: 1.UITableView 中的cell 2.模型的创建 3.MJExtension第三方框架的使用 需求分析 1.界面分析 微博界面 界面控件分析: 整个页面 1.不难知道,界面是由若干个子cell组成的,并且每个子cell的高度都不同,高度都是由内容来定. 2.子模块的控件数不一样,有的是有五个子控件,有的有四个子控件,而有的只有三个. 3.子控件的类型分别是:头像(UIImageView),昵称(UILabel),Vip(UIImageView),微博正文(

iOS 新浪微博-5.1 首页微博列表_时间/配图

在上一篇中,我们已经把首页微博显示出来了,但还有很多细节,需要我们去调整的.这一章中,我们将处理好时间,配图,工具框及转发微博等小细节的功能. 时间处理 第一步:定义一个时间的类别,用于判断是昨天.今天等. NSDate+Time.h #import <Foundation/Foundation.h> @interface NSDate (Time) /** * 判断某个时间是否为今年 */ - (BOOL)isThisYear; /** * 判断某个时间是否为昨天 */ - (BOOL)is

微博feed系统的推(push)模式和拉(pull)模式和时间分区拉模式架构探讨

sns系统,微博系统都应用到了feed(每条微博或者sns里的新鲜事等我们称作feed)系统,不管是twitter.com或者国内的新浪微博,人人网等,在各种技术社区,技术大会上都在分享自己的feed架构,也就是推拉模式(timyang上次也分享了新浪微薄的模式).下面我们就微博的feed推拉(push,pull)模式做一下探讨,并提出新的时间分区拉模式. 众所周知,在微博中,当你发表一篇微博,那么所有关注你的followers(粉丝)都会在一定的时间内收到你的微薄,这有点像群发一封邮件,所有的

微博的几个小功能

主要是做这几个功能 1."广播"按钮的高亮显示: 2.计算文本框中文字的个数: 3.话题.朋友和表情: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> &l

仿微博视频边下边播之滑动TableView自动播放-b

Tips:这次的内容分为两篇文章讲述01.[iOS]仿微博视频边下边播之封装播放器 讲述如何封装一个实现了边下边播并且缓存的视频播放器.02.[iOS]仿微博视频边下边播之滑动TableView自动播放 讲述如何实现在tableView中滑动播放视频,并且是流畅,不阻塞线程,没有任何卡顿的实现滑动播放视频.同时也将讲述当tableView滚动时,以什么样的策略,来确定究竟哪一个cell应该播放视频. 上篇文章讲述了封装一个边下边播,并且带有缓存功能的播放器.如果你还没有看,请点击跳转[iOS]仿

新浪微博客户端(60)-离线缓存微博数据

很多应用在第一次加载时会读取前一次浏览的历史微博数据,只有当用户手动触发下拉刷新之后,才会去加载新的微博数据. 1.集成FMDB FMDB是在sqlite3的C语言查询函数基础上封装的一套OC的API,因此在使用之前需要首先导入libsqlite3.tbd. 2. 添加FMDB库 3. 参考代码: DJStatusDBHelper.h #import <Foundation/Foundation.h> @class DJStatus; @interface DJStatusDBHelper :

微博估计要火一阵的SleepSort之Shell及C实现

今日在微博看到如此神奇的代码,居然还有新的sort算法,对于我这种渣渣必须研究一下,代码如下: #!/bin.bash function f() { sleep "$1" //sleep 这么多s echo "$1" } while [ -n "$1" ] //第一个参数不为空 do f "$1" & //后台运行,相当于fork一个进程去执行f, 父进程同时继续下去 shift //输入参数左移,也即覆盖掉第一个参数

微博传播数量和传播深度的预测--基于pyspark和某个回归算法

8-28决定参加一下这个千万条的数据处理任务,因为场景和自己做过的一个回归分析预测差不多,第一天开始在小规模的数据上做准备工作. ## 第二次大修改版本### date 20160829原始数据处理,得到用户粉丝关系,微博转发在每个时间段的量,微博转发的总体深度下一阶段目标,建立模型,实现基于时间序列的预测 ## 第三次大修改版本### date 20160830将这些运算转移到Linux平台上,因为有的迭代完全让我的电脑的内存受不了这次版本的主要的目的是计算出某个微博的深度的时间序列的变化 #

微博的架构(转)

http://blog.csdn.net/cleanfield/article/details/6339428 用户信息表(t_user_info) 字段名称 字节数 类型 描述 User_id 4 uint32 用户编号(主键) User_name 20 Char[20] 名称 Msg_count 4 uint32 发布消息数量,可以作为t_msg_info水平切分新表的auto_increment Fans_count 4 uint32 粉丝数量 Follow_count 4 Uint32