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

最终效果如下。

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

使用微博自动记录俯卧撑个数相关推荐

  1. 图文融合微博情感分析(小记)

    单独基于文本和图片方法,不能充分挖掘微博用户情感问题,提出图文融合的微博情感分析方法.对大规模图片数据集上预训练的CNN模型参数进行迁移,以微调的方式训练图片情感分类模型FCNN:训练词向量输入可提取 ...

  2. Scrapy实现微博关键词爬虫(爬虫结果写入mongodb)

    爬取字段信息有: 关键词 微博ID 微博内容信息 微博赞的个数 微博转发个数 微博评论个数 转发微博的转发原因 微博日期 转发源ID 原微博的赞个数 原微博的评论个数 原微博的转发个数 存入数据库的I ...

  3. Day 6.重大医疗伤害事件网络舆情能量传播过程分析*———以“魏则西事件”为例

    题目: 重大医疗伤害事件网络舆情能量传播过程分析*---以"魏则西事件"为例 关键词: 网络舆情 情感扩散 社交传播 医疗伤害 能量损耗 转发峰值 摘要: [目的/意义]科学分析网 ...

  4. [Python] 小明又迟到了……一个故事讲清楚 Python 循环嵌套

    Python 语言允许在一个循环体里面嵌入另一个循环.循环嵌套的语法形式如下: 1.Python for 循环嵌套: 语法: for iteration_var in sequence:for ite ...

  5. Python+Excel数据分析实战:军事体能考核成绩评定(四)女子曲臂悬垂计算

    上一章Python+Excel数据分析实战:军事体能考核成绩评定(三)男子引体向上计算成功实现了男子引体向上计算的功能,这一章我们实现女子单杠考试成绩的计算,女子的单杠考核与男子的引体向上不同,为曲臂 ...

  6. 1亿以内素数的个数_ghpython_素数

    今天咱们继续来看老潘微博里的一个python小案例,求1-200以内的所有素数,所谓素数,就是咱高中里说的质数,只能被数字1和其自身整除.且大于1的自然数. 那么就只需要遍历1-200以内的每一个数, ...

  7. 万亿级日访问量下,Redis在微博的9年优化历程

    来自:DBAplus社群 讲师介绍 兰将州,新浪微博核心feed流.广告数据库业务线负责人,主要负责MySQL.NoSQL.TiDB相关的自动化开发和运维,参与Redis.counteservice_ ...

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

    sns系统,微博系统都应用到了feed(每条微博或者sns里的新鲜事等我们称作feed)系统,不管是twitter.com或者国内的新浪微博,人人网等,在各种技术社区,技术大会上都在分享自己的feed ...

  9. 浅谈微博精准推荐——用户行为挖掘与相似用户挖掘

    引言:在推荐系统中,通过对用户数据的挖掘,抽象出用户感兴趣的"商品",以微博的博文推荐为例,"商品"表现为用户的博文,在博文精准推荐中,其核心问题是在给定的环境 ...

最新文章

  1. 用leangoo怎么添加泳道,拖拽移动泳道?
  2. shell 全局和局部变量
  3. CHIL-ORACLE-主外键约束(primary key / foreign key)
  4. 揭开“云杀毒”的真面目
  5. ORACLE 11G 搭建dataguard详细步骤(所有操作总结)
  6. 前端学习(1869)vue之电商管理系统电商系统之配置axios发出登录请求
  7. BGP——邻居状态机+报文分析(总结)
  8. 01python初识—编辑器版本变量知识
  9. ubuntu+intellij IDEA+android环境配置
  10. configServer的高可用
  11. Linux基础命令及其常识
  12. Apache2如何提高并发连接请求数量
  13. 天宝DINI03/莱卡DNA03等电子水准仪原始数据处理软件使用教程
  14. LeetCode T32 Longest Valid Parentheses
  15. 高速钢(HSS)金属切削刀具的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  16. 单击Artwork时没有弹窗的问题
  17. 互斥锁、临界区和事件
  18. Problem B: 排序二叉树
  19. 黑苹果10.10.3手动开启SSD的TIRM提高硬盘效率
  20. 日本旅馆业、民宿分类及管理规定

热门文章

  1. opencv入门Vec3f
  2. 031--python--打印机票页面
  3. 推荐系统:CTR模型学习总结--LR、FM、FFM、Wide and Deep、DeepFM
  4. 如何学习SDN及网络自动化
  5. 【重识云原生】第四章云网络4.8.4节——OpenStack与SDN的集成
  6. (详细)华为畅享6S DIG-AL00的usb调试模式在哪里打开的教程
  7. 逃亡97天!这位麻省理工博士生落网
  8. Android模仿新浪微博(自定义ListView下拉刷新)
  9. bd-rate的计算
  10. Modularity Based Community Detection with Deep Learning 阅读笔记