有时想把kindle上的读书书摘分享到微博上,但是单条微博的长度限制在140个字(所以会有长微博图片发送的应用),加上受到微博名人任志强分享读书书摘采用短信分片的影响,我也无意中倾向于使用纯文字的方式来分享读书书摘。但是目前貌似只有短信支持自动分片,这样使用起来就不是很方便了。于是昨天下午fork了JessonChan的clifaweibo项目,在原功能基础上增加了长文字微博分片发送功能。(PS:clifaweibo是一款终端查看和发送微博的应用)

最新版本的clifaweibo采用GO语言编写(第一次接触GO语言),昨天下午就熟悉了一下GO语言,并简单了解了一下fmt、net/http、strconv、strings、unicode/utf8、time等包。

发现GO没有包自带substring功能,但是对微博分片需要用到这种功能,于是就现学现用了。

func substring(s string, start int, length int) string {
        by := []byte(s)
        i:=0
        for i=0; start >0 && i < len(by); i++ {
                value := by[i]
                if value >= 224 {
                        i+=2;
                        start --
                } else if value >=192 && value <224 {
                        i+=1;
                        start --
                } else {
                        start --
                }   
        }   
        ii := i 
        for ; length>0 && i < len(by); i++ {
                value := by[i]
                if value >= 224 {
                        i+=2;
                        length --
                } else if value >=192 && value <224 {
                        i+=1;
                        length --
                } else {
                        length --
                }   
        }   
        return s[ii: i]
}

有了substring,接下去只要对微博计算一下需要分割成几片就行了。

func send_divided_text_weibo(text string) bool {
	divided_number := (utf8.RuneCountInString(text) + weibo_text_length - 1) / weibo_text_length
	for i := 0 ; i < divided_number ; i++ {
		divided_text := "(" + strconv.Itoa(i+1) + "/" + strconv.Itoa(divided_number) + ")"
		divided_text += substring(text, i*weibo_text_length, weibo_text_length)
		fmt.Println(divided_text)	
		if false == send_text_weibo(divided_text) {
			return false
		}	
		fmt.Println("分片发送成功")	
		time.Sleep(5000 * time.Millisecond)		
	}		
	return true
}

最初没有time.Sleep(5000 * time.Millisecond)这一句,结果测试的时候始终只能发送出去第一条分片,因此我还请教了JessonChan。后面我猜想可能是微博API的限制,不允许短时间内发送多条微博(这个可能性比较小)或者是http.Post()返回结果需要一定的时间,于是加了睡眠5秒。经测试,分片发送成功。

clifaweibo

以后也可以学任志强分享读书摘录啦,O(∩_∩)O哈哈~

查看完整源码点这里



blog comments powered by Disqus

Published

11 March 2013

Category

program