一、需求:

自己在github上搭建一个基于Jekyll的博客(http://beginman.cn/),每次写完博客后就要push上去,博客写的再好,基本上没人访问,为了增加访问量,就想利用起来微博,于是就想法写个脚本同步到微博,选取最新的博客链接发送上去。

二、问题与条件:

1.注册新浪微博

2.注册成新浪微博api开发者,这可以获取“恭喜!我们已经验证了您对网站的管理权!并成功获取 App Key 和 App Secret”

3.最好有自己的小站点,或者基于github的,这里利用起来比较方便。

4.安装新浪的Python SDK

三、脚本

NO1.不算脚本的脚本

由于自己工作开发环境在Linux下,家里工作环境是windows,所以就整个了一键PUSH,完成整个git流程。

  #windows下:bat.bat
  E:
  cd gitblog\beginman.github.com
  git pull origin master
  git add .
  git commit -m "Auto push"
  git push origin master

  #Linux下:github.sh

  #!/bin/bash
  cd ~/gitblog/blog/;
  git pull origin master;
  git add .;
  git ci -m "自动生成";
  git push origin master;

非常非常简单,却很实用,一键完成。

NO2.发送微博
写完博客PUSH上去之后,想让我的微博好友也看看,不想那么太麻烦,于是就写脚本处理(脚本还不够完善,看完之后你会发现还不如自己老老实实的发微博。。。)

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Date    : 2014-03-30 21:53:13
# @Function: 发送新浪微博
# @Author  : BeginMan
import os
import urllib
import urllib2
import re
import sys
from datetime import *
from HTMLParser import HTMLParser
reload(sys)
sys.setdefaultencoding('utf8')
import weibo

# 自己的新浪微博api 应用 (http://open.weibo.com/webmaster/build/?siteid=2045297459)
APP_KEY = '2045297459'
APP_SECRET = '72e31e46b688167303d2ea737194fac1'
CALL_BACK = 'http://beginman.cn/'  

user_agent = 'Mozilla/5.0 (Windows NT 6.1; rv:28.0) Gecko/20100101 Firefox/28.0'
headers = {'User-Agent' : user_agent}
regex = re.compile(
    r'^(?:http|ftp)s?://' # http:// or https://
    r'(?:(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+(?:[A-Z]{2,6}\.?|[A-Z0-9-]{2,}\.?)|' #domain...
    r'localhost|' #localhost...
    r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})' # ...or ip
    r'(?::\d+)?' # optional port
    r'(?:/?|[/?]\S+)$', re.IGNORECASE)

class MyHTMLParser(HTMLParser):
    """HTML解析"""
    def __init__(self):
        HTMLParser.__init__(self)
        self.values = []
        self.links = []

    def handle_starttag(self, tag, attrs):
        """获取生成短网址文本框value和自己网站的最新博客链接"""
        if tag == "input":
            if len(attrs) == 0: pass
            else:
                for (variable, value) in attrs:
                    if variable == "value":
                        if regex.match(value):
                            self.values.append(value)
        if tag == 'a':
            if len(attrs) == 0: pass
            else:
                for (variable, value) in attrs:
                    if variable == "href":
                        if regex.match(value):
                            self.links.append(value)

def WeiboRun(): 

    client = weibo.APIClient(APP_KEY, APP_SECRET, CALL_BACK)
    auth_url = client.get_authorize_url()
    print u'还是将这个url粘贴到浏览器上吧\n %s' %auth_url                 # 数据格式:http://beginman.cn/?code=1caa08eb6c0e7d44bd26feb4419efa82
    code = raw_input(u'请输入code:\n')
    # 获取博客最新文章链接
    beginman = 'http://beginman.cn/'
    new_url = get_blog_newurl(beginman)
    weibo_short_url = get_short_url(new_url)                        # 获取微博短链接

    r = client.request_access_token(code)
    client.set_access_token(r.access_token, r.expires_in)           

    # 发布微博
    now = datetime.now()
    while True:
        print u"是否要发布微博?(y/n)"
        choice = raw_input()
        if choice == 'y' or choice == 'Y':
            content = """
            BeginMan于%s,在博客中(beginman.cn)发布了一篇惊天地泣鬼神的博客,相信会对你有帮助的,\(◎o◎)/..点击链接查看%s
            """%(now,new_url)
            # status=u'测试OAuth 2.0带图片发微博', pic=open('/Users/michael/test.png')
            #调用接口发一条新微薄,status参数就是微博内容
            client.statuses.update.post(status=content)
            print "微博发送成功!"
            break;  

        if choice == 'n' or choice == 'N':
            break      

def get_blog_newurl(blog_url):
    """通过验证,到自己网站中抓取数据,最新博客链接"""
    req = urllib2.Request(blog_url,headers=headers)
    try:
        response = urllib2.urlopen(req)
    except urllib2.URLError, e:
        if hasattr(e, 'reason'):
            print 'Reason: ', e
        elif hasattr(e, 'code'):
            print 'Code: ', e
    else:
        result = response.read()
        hp = MyHTMLParser()
        hp.feed(result)
        hp.close()
        # 选取链接
        links_list = hp.links          # 所有链接列表
        links_msg = u"""
        ****************************************************************************
        \n"""
        count = 0
        for obj in links_list:
            count += 1
            links_msg+=u'[%s]   %s \n' %(count,obj)
        msg_end = u"""
        ****************************************************************************
        \n 请选择链接前的数字来选取吧:
        """
        links_msg += msg_end
        option = raw_input(links_msg)
        newurl = links_list[int(option)-1]
        return newurl

def get_short_url(long_url):
    """生成微博短网址"""
    data = {'url':long_url}
    data = urllib.urlencode(data)
    req = urllib2.Request('http://www.waqiang.com/index.php/url/shorten',data,headers)
    try:
        response = urllib2.urlopen(req)
    except urllib2.URLError, e:
        if hasattr(e, 'reason'):
            print 'Reason: ', e
        elif hasattr(e, 'code'):
            print 'Code: ', e
    else:
        result = response.read()
        hp = MyHTMLParser()
        hp.feed(result)
        hp.close()
        values_list = hp.values[0]
        return values_list   

def main():
    WeiboRun()

if __name__ == '__main__':
    main()
    

三.参考

新浪开放平台

11.7. 处理重定向

https://github.com/wuyuntao/weibopy

Sina Weibo Python Client

四.完善

1.不再时时验证Code

2.爬取最新博客概述写入微博中

3.精准博客URL

附动态图:

python实现自动发送微博,当自己写博客时同步上去。的更多相关文章

  1. 记录一次在Github写博客时的报错和解决方法

    前几天刚刚搭建好了Github博客,打算用作记录Go语言学习笔记.由于在此前我没有使用过markdown语法写过博客,所以跟着文档了解了格式就想试试, 发表第一篇博客.markdown编辑器我用的是T ...

  2. 写博客的技巧整理——基于Markdown

    我们需要掌握各种技巧,这样才能在写博客时游刃有余,以下内容觉得不错就点个赞吧 文章目录 1.目录与目录跳转 目录一(示例用勿点) 目录二(示例用勿点) 目录三(示例用勿点) 2.文字与图片 3.引用 ...

  3. Python 每日提醒写博客小程序,使用pywin32、bs4库

    死循环延迟调用方法,使用bs4库检索博客首页文章的日期是否与今天日期匹配,不匹配则说明今天没写文章,调用pywin32库进行弹窗提醒我写博客.

  4. 10 年 bloger 告诉你要不要写博客,又该如何优雅地写博客?

    关于作者:程序猿石头(ID: tangleithu),现任阿里巴巴技术专家,清华学渣,前大疆后端 Leader.公众号后台回复关键字 "1024" 获取程序员大厂面试指南. 图:D ...

  5. 象写程序一样写博客:搭建基于github的博客

    象写程序一样写博客:搭建基于github的博客   前言 github 真是无所不能.其 Pages 功能 支持上传 html,并且在页面中显示.于是有好事者做了一个基于 github 的博客管理工具 ...

  6. 《REWORK》启示录 招聘笔杆子——程序员为什么值得写博客

    Hire Great Writers 仿佛这是写给自己看的,不过这在其中也有着相当有趣的意义 .虽然自己算是一个能写的人,或许这算是一种不算才华的才华,写博文的意义通常不会在于去描述自己怎样,怎样.通 ...

  7. jupyter巨好玩-使用jupyter结合VScode写博客

    打开jupyter-ipython 其实人家就叫jupyter了,后面咱可能就少提ipython了. # 打开命令行,让我们输入 jupyter notebook 当然,这个前提是你已经安装了jupy ...

  8. [Python学习] 简单网络爬虫抓取博客文章及思想介绍

            前面一直强调Python运用到网络爬虫方面很有效,这篇文章也是结合学习的Python视频知识及我研究生数据挖掘方向的知识.从而简介下Python是怎样爬去网络数据的,文章知识很easy ...

  9. 回归写博客时间-----CeliaTodd

    2019-10-17-19:28:01 记录自己的学习路程 国庆期间本来是有持续写博客的,但是有各种原因就没时间写博客了, 但是学习的进度还是没有落下的,现在正式回归写博客的时间了. 但现在不是写Py ...

随机推荐

  1. 咏南WEB开发框架(FOR XE10.1 BERLIN)

    咏南WEB开发框架(FOR XE10.1 BERLIN) 1)支持最新的XE10.1 BERLIN开发WEB程序 2)如同开发VCL WIN32程序一样的速度 3)WEB框架通过咏南中间件和数据库打交 ...

  2. 教你理解Fragment

    定义 Fragment 表示 Activity 中的行为或用户界面部分.我们可以将多个片段组合在一个 Activity 中来构建多窗口UI,以及在多个 Activity 中重复使用某个片段.可以将片段 ...

  3. option2

    option = { tooltip : { show: true, trigger: 'item' }, legend: { data:['邮件营销','联盟广告','直接访问','搜索引擎'] } ...

  4. <雨季>

    忘不了节后漫长的雨季,灰暗阴冷的天气,潮湿的心情,总让我怀念家乡刺眼的阳光,即使在寒冷的冬季,唯有那窗外的紫荆花独自开放.飘落满地,给灰色的世界增添点色彩,合着同学们上早课的笑声,暂时排遣那一份思乡情 ...

  5. JS实现滑动门效果

    html部分 p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 31.0px Consolas; color: #2b7ec3 } p.p2 { margin ...

  6. MySQL大小写敏感说明

    Linux环境下,不是windows平台下.区别很大.注意. 一图胜千言   mysql> show create table Ac; +-------+-------------------- ...

  7. Week1 Java 基础知识

    JDK=JRE+Tools   JRE=JVM+API 封装:1.模块化:将属性和行为封装在类中,程序定义很多类:2.信息隐蔽:将类的细节部分隐藏起来,用户只通过受保护的接口访问某个类. 继承:父类和 ...

  8. Dynamic CRM 2013学习笔记(三十三)自定义审批流4 - 规则节点 -有分支的流程处理

    上次介绍过节点的基本配置<Dynamic CRM 2013学习笔记(三十二)自定义审批流3 - 节点及实体配置>,这次介绍下规则节点,因为有时流程里会有一些分支.合并,这时就要用到规则节点 ...

  9. 微信支付接口 H5

    php微信支付若干问题记录 1.缺少参数$key0$ 此问题的可能性有几种,大致有1.timeStamp这个参数应该是string类型,默认time是int 2.确实是参数缺少  比如:prepay_ ...

  10. 【Leetcode】【Medium】Set Matrix Zeroes

    Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place. 解题思路: ...