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

简介: 根据SMART原则我制定了2016年的目标。每个月都有一个小目标,每个目标都是specific(具体)、Measurable(可度量)、Attainable(可实现)、Relevant(相关性)、Time-bound(时限)的。

根据SMART原则我制定了2016年的目标。每个月都有一个小目标,每个目标都是specific(具体)、Measurable(可度量)、Attainable(可实现)、Relevant(相关性)、Time-bound(时限)的。1月份的目标是跑步200公里,其中包含4个半程马拉松。1月底验收的时候发现这个目标轻松达成,整个1月份我总共跑了220公里+,其中跑了4个半程马拉松。而且第二次的马拉松打破我的个人记录,成绩为1小时43分30秒,把我的个人最好成绩提高了2分钟。

img_0d04f003c787e445897ae1cf84798853.jpg

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

最终效果如下。

img_b5f38e1369e08e14c5bfc58f92ffec79.png

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

相关文章
|
Ubuntu
Ubuntu Server 20.04 LTS下载及安装教程
Ubuntu Server 20.04 LTS下载及安装教程
4650 0
Ubuntu Server 20.04 LTS下载及安装教程
libtool: Version mismatch error 解决
libtool: Version mismatch error 解决
928 0
|
8月前
|
存储 Java 开发者
Java 中的 equals 方法:看似简单,实则深藏玄机
本文深入探讨了Java中`equals`方法的设计与实现。默认情况下,`equals`仅比较对象引用是否相同。以`String`类为例,其重写了`equals`方法,通过引用判断、类型检查、长度对比及字符逐一比对,确保内容相等的逻辑。文章还强调了`equals`方法需遵循的五大原则(自反性、对称性等),以及与`hashCode`的关系,避免集合操作中的潜在问题。最后,对比了`instanceof`和`getClass()`在类型判断中的优劣,并总结了正确重写`equals`方法的重要性,帮助开发者提升代码质量。
590 1
|
安全 CDN
阿里云CDN产品解读及全站加速在游戏行业的最佳实践!
阿里云CDN(内容分发网络)为全球用户提供快速、稳定、安全的内容分发加速服务,显著提升访问响应速度和成功率
252 13
|
10月前
|
SQL 人工智能 Java
放弃单一模型!通义灵码多模型混搭调参实战 - 实测Qwen2.5代码通过率提升27%
本报告展示了模型性能压测结果,使用Python脚本对多个AI模型(如DeepSeek-R1、Qwen2.5-72B、DeepSeek-V3)进行测试。任务包括代码补全、SQL生成和测试用例生成,记录响应时间及Tokens消耗,并统计代码通过率。结果显示,各模型在不同任务上的表现有所差异,Qwen2.5-72B在代码补全任务中表现出色,平均响应时间为3.8秒,代码通过率达95%。
332 4
|
10月前
|
自然语言处理 算法 机器人
2025年热门智能客服机器人评测:哪款更好用?
2025年,智能客服机器人市场竞争激烈,功能日益强大。主要品牌如合力亿捷、阿里云、华为云、京东京小智和小米商城等纷纷推出具备精准语音识别、语义理解、多渠道接入等功能的产品,广泛应用于电商、金融、零售等领域,显著提升客服效率与客户满意度,降低企业运营成本。
779 0
|
数据采集 人工智能 自然语言处理
全球首篇!调研近400篇文献,鹏城实验室&中大深度解析具身智能
【8月更文挑战第17天】在人工智能领域,具身智能正成为研究焦点。它强调智能体在现实世界中的感知与交互。近期,鹏城实验室与中山大学联合发布的首篇全球具身智能综述,调研近400篇文献,总结了该领域的理论和技术进展。文章探讨了具身感知、交互及仿真到现实的适应性等关键议题,并指出了面临的挑战如数据质量、模型泛化等,为通向通用人工智能铺路。论文已发表于IEEE会议记录中。
623 60
|
监控 NoSQL 网络协议
【Azure Redis】部署在AKS中的应用,连接Redis高频率出现timeout问题
查看Redis状态,没有任何异常,服务没有更新,Service Load, CPU, Memory, Connect等指标均正常。在排除Redis端问题后,转向了AKS中。 开始调查AKS的网络状态。最终发现每次Redis客户端出现超时问题时,几乎都对应了AKS NAT Gateway的更新事件,而Redis服务端没有任何异常。因此,超时问题很可能是由于NAT Gateway更新事件导致TCP连接被重置。
233 7
|
JSON Java 数据格式
【小知识】Windows下ElasticSearch 安装与配置
【小知识】Windows下ElasticSearch 安装与配置
821 0
【小知识】Windows下ElasticSearch 安装与配置
|
SQL 监控 安全
【阿里云云原生专栏】云原生安全体系构建:阿里云云防火墙与WAF的应用
【5月更文挑战第27天】阿里云云防火墙和WAF是构建云原生安全体系的关键产品,提供网络、主机和Web应用多维度防护。云防火墙采用分布式架构抵御网络攻击,确保应用安全稳定;WAF专注Web应用安全,防止SQL注入、XSS和DDoS等威胁。简单部署配置,结合使用可实现全面安全防护,提升企业云上应用安全性,保障业务安全运行。未来,阿里云将持续强化云原生安全建设。
653 1