如何使用Ubuntu online account API来创建微博HTML5应用
来源:互联网 发布:js函数中定义数组 编辑:程序博客网 时间:2024/05/22 02:23
在这篇文章中,我们将使用Ubuntu SDK所提供的online account API来访问微博的API并显示所需要的内容。这篇文章的重点是展示如何在HTML 5中使用online account API。我们将创建一个简单的HTML 5应用。我们最终显示的画面如下:
更多关于HTML5应用开发的资料可以在地址:https://developer.ubuntu.com/en/apps/html-5/
1)创建一个最基本的应用
我们还是像以前一样使用我们的Ubuntu SDK来创建一个最基本的weibo HTML 5应用。
这样我们就创建了一个最基本的weibo HTML 5应用。你可以使用热键Ctrl + R来运行它虽然它并不能做什么事。
2)加入online account所需要的文件
我们可以参考文章来对online account API有更深的了解。为了能够访问,需要创建如下的文件:
1)weibo.application
<?xml version="1.0" encoding="UTF-8"?><application> <description>Weibo scope</description> <desktop-entry>weibo.ubuntu_weibo.desktop</desktop-entry> <services> <service id="html5-weibo.ubuntu_html5weibo"> <description>Watch your favorite Weibo messages</description> </service> </services></application>
2)weibo.service
<?xml version="1.0" encoding="UTF-8"?><service> <type>sharing</type> <name>Weibo scope</name> <icon>html5-weibo.png</icon> <provider>html5-weibo.ubuntu_account-plugin</provider> <translations>unity-scope-weibo</translations></service><strong></strong>
3)创建一个plugin文件目录并在它的下面创建
a)Main.qml, 它的内容为:
import Ubuntu.OnlineAccounts.Plugin 1.0OAuthMain {}
b) qml-weibo.ubuntu_plugin.provider,它的内容为:
<?xml version="1.0" encoding="UTF-8"?><provider> <name>Weibo</name> <icon>weibo.png</icon> <translations>unity-scope-weibo</translations> <plugin>generic-oauth</plugin> <domains>.*weibo\.com</domains> <single-account>true</single-account> <template> <group name="auth"> <setting name="method">oauth2</setting> <setting name="mechanism">web_server</setting> <group name="oauth2"> <group name="web_server"> <setting name="Host">api.weibo.com</setting> <setting name="AuthPath">oauth2/authorize</setting> <setting name="TokenPath">oauth2/access_token</setting> <setting name="RedirectUri">https://api.weibo.com/oauth2/default.html</setting> <setting name="ResponseType">code</setting> <setting name="ClientId">Your developer key</setting> <setting type="as" name="AllowedSchemes">['https','http']</setting> <setting name="ClientSecret">Your developer secret</setting> <setting name="ForceClientAuthViaRequestBody" type="b">true</setting> </group> </group> </group> </template></provider>
在上面的文件中一定要输入自己的“your developer key”及“your developer secret”。这个你需要在微博API的网站上去申请。整个文件的架构为:
4)修改manifest.json文件如下:
{ "name": "html5-weibo.ubuntu", "description": "description of html5-weibo", "architecture": "all", "title": "html5-weibo", "hooks": { "html5weibo": { "apparmor": "html5weibo.apparmor", "desktop": "html5weibo.desktop", "account-application": "weibo.application", "account-service": "weibo.service" }, "account-plugin": { "account-provider": "plugin/html5-weibo.ubuntu_account-plugin.provider", "account-qml-plugin": "plugin/qml" } }, "version": "0.1", "maintainer": "XiaoGuo, Liu <xiaoguo.liu@canonical.com>", "framework": "ubuntu-sdk-14.10"}
这里添加了account及plugin的一些设置。
5)为了能够让.service,.application及.provider文件能正常得到显示,我们对“qml-weibo.qmlproject”添加如下的东西:
Files { filter: "*.service" } Files { filter: "*.application" } Files { filter: "*.provider" }
到这里,我们已经基本上已经修改或添加好我们所需要的文件。
3)设计应用的UI
修改我们的“index.html”文件:
<!DOCTYPE html><html><head> <meta charset="utf-8"> <title>An Ubuntu HTML5 application</title> <meta name="description" content="An Ubuntu HTML5 application"> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0"> <!-- Application stylesheets Include your own stylesheets below to style your application. --> <link rel="stylesheet" href="css/app.css" type="text/css" /> <!-- Ubuntu UI javascript imports - Ambiance theme Ubuntu provides building blocks that you can use in your application. For more information, you can check out the documentation at http://design.ubuntu.com/apps. --> <!-- Ubuntu UI Style imports - Ambiance theme --> <link href="/usr/share/ubuntu-html5-ui-toolkit/0.1/ambiance/css/appTemplate.css" rel="stylesheet" type="text/css" /> <script src="/usr/share/ubuntu-html5-ui-toolkit/0.1/ambiance/js/fast-buttons.js"></script> <script src="/usr/share/ubuntu-html5-ui-toolkit/0.1/ambiance/js/core.js"></script> <script src="/usr/share/ubuntu-html5-ui-toolkit/0.1/ambiance/js/buttons.js"></script> <script src="/usr/share/ubuntu-html5-ui-toolkit/0.1/ambiance/js/page.js"></script> <script src="/usr/share/ubuntu-html5-ui-toolkit/0.1/ambiance/js/pagestacks.js"></script> <script src="/usr/share/ubuntu-html5-ui-toolkit/0.1/ambiance/js/popovers.js"></script> <script src="/usr/share/ubuntu-html5-ui-toolkit/0.1/ambiance/js/list.js"></script> <script src="/usr/share/ubuntu-html5-ui-toolkit/0.1/ambiance/js/toolbars.js"></script> <script src="/usr/share/ubuntu-html5-ui-toolkit/0.1/ambiance/js/tabs.js"></script> <script src="/usr/share/ubuntu-html5-ui-toolkit/0.1/ambiance/js/shape.js"></script></head><body> <div data-role="mainview"> <header data-role="header"> </header> <div data-role="content"> <div data-role="pagestack"> <div data-role="page" id="main" data-title="Weibo Status"> <section data-role="list" id="statuslist"></section> <div id='results'></div> </div> <!-- main --> </div> <!-- pagestack --> </div> <!-- content --> </div> <!-- mainview --> <script src="js/app.js"></script> </body></html>
这里的UI非常简单,我只使用了一个list控件。我们大部分的代码将在“app.js”中实现:
var token = '';window.onload = function () { console.log("this is so cool....!") var UI = new UbuntuUI(); UI.init(); UI.pagestack.push('main'); var api = external.getUnityObject('1.0'); var oa = api.OnlineAccounts; // UI.button('getstatus').click(auth); auth(); function auth() { console.log("getstatus button is clicked!"); var filters = {'provider': 'html5-weibo.ubuntu_account-plugin', 'service': ''}; oa.api.getAccounts(filters, function(accounts) { console.log("total length: " + accounts.length); if (accounts.length < 1) { // setResults('No accounts available'); oa.api.requestAccount( "html5-weibo.ubuntu_html5weibo", unescape("html5-weibo.ubuntu_account-plugin"), function() { console.log("requestAccount callback..."); auth(); }); return; } else { // setResults("Available accounts: " + accounts.length); } function authcallback(res) { token = res['data']['AccessToken']; console.log("AccessToken: " + token);// setResults("AccessToken: " + token); getWeiboStatus(token, function(statuses) { console.log("the length: " + statuses.length); if (statuses) { // create the 'ul' element var ul = document.createElement('ul');// var results = document.getElementById('results'); var results = document.querySelector('#results'); var statuslist = document.querySelector('#statuslist'); var ul = document.createElement('ul'); for (var i = 0; i < statuses.length; i ++) { var li = document.createElement('li'); ul.appendChild(li); var aside = document.createElement('aside'); li.appendChild(aside); var img = document.createElement('img'); img.setAttribute('src', statuses[i]['profile_image_url']); img.setAttribute('width', "50"); img.setAttribute('height', "50"); aside.appendChild(img); var a = document.createElement('a'); a.setAttribute('href', '#'); a.innerHTML = statuses[i]['text']; li.appendChild(a); var right = document.createElement('label'); right.innerHTML = "" li.appendChild(right); } console.log("it is done6"); statuslist.appendChild(ul); } else { setResults('<br><br>ERROR'); } }); } accounts[0].authenticate(authcallback); }); //getAccounts } //auth function getWeiboStatus(accessToken, callback) { var http = new XMLHttpRequest() var url = "https://api.weibo.com/2/statuses/home_timeline.json?access_token=" + accessToken + "&page=" + 1 console.log('url: \n' + url) http.open("GET", url, true); var statuses = []; http.onreadystatechange = function() { if (http.readyState === 4){ if (http.status == 200) { var response = JSON.parse(http.responseText); console.log("it succeeds! lenght: " ); for (i = 0; i < response['statuses'].length; i++ ) { var time = JSON.stringify(response['statuses'][i]['created_at']);// console.log("time: " + time ); var text = JSON.stringify(response['statuses'][i]['text']);// console.log("text: " + text); var name = JSON.stringify(response['statuses'][i]['user']['name']);// console.log("name: " + name); var profile_image_url = JSON.stringify(response['statuses'][i]['user']['profile_image_url']); profile_image_url = profile_image_url.slice(1, profile_image_url.length-1);// console.log("profile_image_url: " + profile_image_url); var id = JSON.stringify(response['statuses'][i]['idstr']); statuses.push({'time': time, 'text': text, 'name': name, 'id': id, 'profile_image_url': profile_image_url}); } callback(statuses); } else { console.log("error: " + http.status) callback(null); } } }; http.send(null); } function setResults(data) { var results = document.getElementById('results'); results.innerHTML = data; };}; //onload
我们可以使用如下的句子来得到online account API的接口:
var api = external.getUnityObject('1.0'); var oa = api.OnlineAccounts;
在这里,我们使用HTML 5的online account API来检查是否有如下的provider:
var filters = {'provider': 'html5-weibo.ubuntu_account-plugin', 'service': ''};
如果没有,我们使用如下的代码来创建weibo账号:
if (accounts.length < 1) { // setResults('No accounts available'); oa.api.requestAccount( "html5-weibo.ubuntu_html5weibo", unescape("html5-weibo.ubuntu_account-plugin"), function() { console.log("requestAccount callback..."); auth(); }); return; }
等创建成功了,我们使用“auth()”来得到访问weibo的access token。进而我们可以得到我们所需要的任何的信息。
被创建的账号,可以在“系统设置”里的“账号”中可以看到:
另外我们可以在手机或模拟器中的如下的目录中看到我们所创建的文件:
整个项目的源码在:https://github.com/liu-xiao-guo/html5weibo
0 0
- 如何使用Ubuntu online account API来创建微博HTML5应用
- 如何使用Ubuntu online account API来创建微博QML应用
- 如何使用online account来创建微博Scope
- 使用jQuery、Yahoo API和HTML5的geolocation来开发一个天气预报web应用
- 使用jQuery、Yahoo API和HTML5的geolocation来开发一个天气预报web应用
- 使用HTML5和CSS3来创建幻灯片
- 如何使用 HTML5 的 Notification API
- 如何使用HTML5实现全屏API
- 转:如何使用HTML5的Notification API
- 如何使用Ubuntu手机平台中的照相机API来存储照片
- 学习如何使用detours来HOOK API
- 如何使用apidoc来自动更新API文档
- 如何使用HTML5创建在线精美简历
- 在Ubuntu平台上创建Cordova Camera HTML5应用
- 使用SAPUI5来创建Web应用UI
- 如何使用HTML5实现拍照上传应用
- 如何使用HTML5实现拍照上传应用
- 如何使用HTML5实现拍照上传应用
- Eclipse is running in a JRE, but a JDK is required
- 问题:编译kirlog时出现错误openssl-0.9.8i/libssl.so.0.9.8': No such file
- 3.16android debug 获取cpu使用率和内存占用率
- 对硬件开发流程的一些朴素的认识
- 牛顿迭代法 C
- 如何使用Ubuntu online account API来创建微博HTML5应用
- Python学习之路——编程风格
- 有趣的机器学习:最简明入门指南
- 杂谈随想第004篇:博客访问量突破三万了
- wegweg
- IIS经典模式和集成模式的区别
- XML文件编辑和格式化的利器:Firstobject free XML editor
- Matlab Newton‘s method
- IPTABLES中SNAT和MASQUERADE的区别