最近要做個課程設計,使用微博控制樹莓派,樹莓派再控制發光二極管的亮和滅,主要設計分兩層,上層是用Java調用新浪微博API來實現對微博旳監聽,當我的微博被回覆時能夠自動讀取評論內容,並根據評論的指令內容來決定樹莓派的控制動作。下層是用C語言調用操作系統底層接口來實現用樹莓派GPIO接口控制發光二極管的閃爍、亮滅。
由於網上教程都很老了,最近微博接口發生了很多變化,所以我決定全新寫一篇詳細的博文,如若能對您起到幫助作用,那將是我莫大的榮幸。同時我非常希望能與您交流,有問題請在評論裏回覆我。
本文將終點講解怎麼樣申請微博接口,一步步用Java發佈自己的微博。【首先你要有微博賬號】
一、申請成爲開發者
http://open.weibo.com/到這裏申請。點擊“我的應用”就能看到 身份認證:未認證,自己把該做的做了,這裏不詳細講。審覈很快的,不到一天就通過。
之後應該是這樣的(哈哈,歡迎互粉哈):
二、創建應用
這裏網上的教程存在誤導性,我按照那些教程來,結果把我拖到了坑裏,我已經爬出來了,希望你們不要再掉進去。
如果想用Java來控制微博,那麼在創建應用時就不能創建“站內應用”,要創建“移動應用”,注意這一點,不然到了權限驗證那一步會通不過的。
“微連接”——“移動應用”——“立即接入”——“繼續創建”
現在我們來到了填寫信息的地方,自己隨便寫個應用名字(這名字後期改的話會很麻煩,請一次性填好),例如“手機控制樹莓派”,客戶端就選“手機”,應用平臺選Android就行了,其實無影響。然後“創建”。好了現在又進入了一個新的界面,我們只是用來測試,所以不用審覈,除非你想讓你的應用上線。
三、重要信息設置與記錄
這步很重要,直接關係到以後能不能正確接入。
左側面板:“應用信息”——“高級信息”
看到“OAuth2.0 授權設置”,點擊“編輯”。“授權回調頁:”和“取消授權回調頁:”很重要,那些創建了“站內應用”的到這裏應該哭了,因爲他們無法修改“授權回調頁:”。。。
那麼怎麼改呢?兩個都改成:https://api.weibo.com/oauth2/default.html,這是微博默認的,我們測試夠用了。
如圖:
再點擊“基本信息”,
記下:APP Key和App Secret,後面有用。
四、下載微博Java SDK
來這裏https://github.com/sunxiaowei2014/weibo4j-oauth2-beta3.1.1/
下載zip壓縮包:weibo4j-oauth2-beta3.1.1.zip
五、將SDK導入Eclipse
什麼?你一直用文本編輯器寫Java?好吧,聽我一句勸,寫這玩意兒時還是換成Eclipse吧,不然會累死的。
打開Eclipse,“File”——“Import”——“General下面Existing Projects into Workspace”——“Select archive File”——選擇剛纔的SDK壓縮包——“Finish”。
至此導入完成。
六、修改配置信息
打開圖中這個config.properties文件,把“client_ID”和“client_SERCRET”後面的值分別改爲你記下的“App Key”和“App Secret”。“redirect_URI”的值改爲https://api.weibo.com/oauth2/default.html
保存。
七、應用授權
如圖:
編譯執行OAuth4Code.java文件。
你的瀏覽器會被自動調用,打開一個授權頁面。如下圖:
點擊“授權”。
轉到如下圖:
別急着關瀏覽器!請複製地址欄中code=後面的那一串字符串。
回到Eclipse,下方Console中正等待你輸入什麼。Hit enter when it's done.[Enter]:
沒錯,就是他。粘貼你剛纔複製的字符串,回車。
好了,等幾秒你的授權信息就返回了。
AccessToken [accessToken=xxxxxxxxxxxxxxxx, expireIn=157679999, refreshToken=,uid=xxxxxxxxx]
"access_token"後面的一串字符和"uid"後面的數字很重要,記下來。
現在你可以關閉瀏覽器了。
這裏提醒下,如果當初創建應用是“站內應用”而不是“移動應用”的話,那麼這一步不會成功,你看到的永遠是“error:redirect_uri_mismatch”的頁面。
八:發微博
微博SDK包裏面,你看看examples下面有很多程序,這些都是例子,涵蓋了該SDK所能做的任何事,你只需參照着寫。
weibo4j.examples.timeline這個包裏面的UpdateStatus.java是發微博的例子。
我們在src裏面建立一個新的package叫做myweibo,然後在之下建立幾個新的類,這裏我已經建立了好幾個。
我演示下怎麼發微博。
在myweibo下建立新類SendWeibo.java
將examples——weibo4j.examples.timeline——UpdateStatus.java例子程序中的main方法體整個複製過來,粘貼後Eclipse會自動import需要引用的包。
把String access_token=後面換成你剛纔的access_token的值。String statuses=後面是你的微博正文。
改完後就是:
然後運行這個Java代碼就行了,只要不報錯就成功了。去你的微博看看。
注意:如果你不知道一個函數(我還是習慣叫函數,不叫方法)是幹啥的, 不知道它的參數含義,請把光標移動到函數上。
SDK裏面提供的各種函數都很好用,什麼獲取微博,獲取評論,獲取評論ID,回覆評論,獲取地理位置,獲取照片,發照片,獲取粉絲關係,獲取朋友圈微博等等,太多了,大家自己慢慢嘗試吧。
九:發佈程序:
如果你要把該程序拿到其他地方運行,比如樹莓派Linux或者虛擬機裏的Linux上,那麼有些地方需要注意。
我們先發布程序:
我們在weibo4j-oauth2這個項目上點右鍵選“Export”,然後如圖:
下一步,
哪個程序是入口,Launch configuration就選哪個,這裏我們是執行發微博的程序:SendWeibo。
選好路徑,下面的Library Handing選第二個保險一點。然後Finish,可能會彈出警告,不用管,點OK。
然後就生成了。然後你一雙擊jar包,程序一閃而過,留下了一個weibo.log文件,這裏面是日誌。萬一出錯可以查看日誌找原因。現在程序被執行了,它又發佈了一條微博。
你可以把這文件拖到虛擬機的Linux裏,我們見識下Java是如何到處運行的,結果java -jar 1.jar運行後報錯了,怎麼回事呢?
仔細看看錯誤信息,裏面寫着java.net.UnknownHostException,再看看錯誤信息裏是不是寫着InetAddress.getLocalHost()這個方法呢,沒錯就是它造成的。
解決方案:
首先ifconfig看看你的IP,這個不在乎是局域網IP還是外網IP,只要求是你看到的本機IP就行。
修改/etc/hosts這個host文件,加入一行,
你的ip 你的主機名 # KD.localdomain是我的主機名
至於怎麼查看主機名,在報錯信息裏應該有,比如localhost.localdomain之類的。KD.localdomain這個是我自己改的。你也可以查看/etc/hosts來確認你的主機名。
這麼修改完以後,再次運行1.jar試試,應該就成功了。我就不截圖了。開虛擬機挺麻煩的。
PS:發完微博試試就行了,別亂發,這效果類似於刷屏,會被打的。
調用API這件事有時候很容易出問題,歡迎大家評論交流。我是學Linux內核底層的,搞Java不是很精通,是個半吊子水平,如果班門弄斧了,還請不要見笑。也歡迎大家與我交流Linux問題。