如何使用Ubuntu online account API创建微博HTML5申请书
在这篇文章中。我们将使用Ubuntu SDK提供online account API来訪问微博的API并显示所须要的内容。这篇文章的重点是展示怎样在HTML 5中使用online account API。我们将创建一个简单的HTML 5应用。我们终于显示的画面例如以下:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvVWJ1bnR1VG91Y2g=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" width="200" height="300" alt="">
很多其它关于HTML5应用开发的资料能够在地址:https://developer.ubuntu.com/en/apps/html-5/
1)创建一个最主要的应用
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvVWJ1bnR1VG91Y2g=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" width="300" height="200" alt="">
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvVWJ1bnR1VG91Y2g=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" width="300" height="200" alt="">
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvVWJ1bnR1VG91Y2g=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" width="300" height="200" alt="">
你能够使用热键Ctrl + R来执行它尽管它并不能做什么事。
2)增加online account所须要的文件
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>
- import Ubuntu.OnlineAccounts.Plugin 1.0
- OAuthMain {}
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>
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvVWJ1bnR1VG91Y2g=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" width="400" height="300" alt="">
- {
- "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
- <!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很easy,我仅仅使用了一个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;
- 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。进而我们能够得到我们所须要的不论什么的信息。
版权声明:本文博主原创文章,博客,未经同意不得转载。
如何使用Ubuntu online account API创建微博HTML5申请书的更多相关文章
- [PHP] 调用微博API 发微博OAuth2.0
在实际测试中出现很多问题, 第一就是按照文档调用ACCESS_TOKEN的时候费老劲啦,因为是编辑线上的,有好多中文空格,没有看出来!整了好久! 第二个就是在调用api发微博的时候出现乱码!必须把发送 ...
- 使用Azure REST API创建虚拟机
Hollis Yao, Shihao Rong 使用REST API创建虚拟机之前,首先要确保Azure订阅中已经建好了"云服务"和"存储账号".如果没有的话 ...
- 使用hbase的api创建表时出现的异常
/usr/lib/jvm/java-7-openjdk-amd64/bin/java -Didea.launcher.port=7538 -Didea.launcher.bin.path=/usr/l ...
- (译)iPhone: 用公开API创建带小数点的数字键盘 (OS 3.0, OS 4.0)
(译)iPhone: 用公开API创建带小数点的数字键盘 (OS 3.0, OS 4.0) 更新:ios4.1现在已经将这个做到SDK了.你可以设置键盘类型为UIKeyboardTypeDecimal ...
- JavaEE Tutorials (11) - 使用Criteria API创建查询
11.1Criteria和Metamodel API概述16811.2使用Metamodel API为实体类建模170 11.2.1使用元模型类17011.3使用Criteria API和Metamo ...
- 使用Win32 API创建不规则形状&带透明色的窗口
前一阵突然想起了9月份电面某公司实习时的二面题,大概就是说怎么用Win32 API实现一个透明的窗口,估计当时我的脑残答案肯定让面试官哭笑不得吧.所以本人决定好好研究下这个问题.经过一下午的摸索,基本 ...
- Revit通过API创建共享参数
Revit共享参数是通过创建一个.txt类型的文件来保存相关信息,一旦与项目保存完毕之后,共享参数也就变成了项目参数(项目参数无法通过API创建),项目参数是保存在Revit项目里面的,所以此时这个. ...
- 在Ubuntu 12.04下创建eclipse的桌面链接
在Ubuntu 12.04下创建eclipse的桌面链接 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 在Ubuntu 12.04上安装Hadoop并 ...
- Yii2 restful api创建,认证授权以及速率控制
Yii2 restful api创建,认证授权以及速率控制 下面是对restful从创建到速率控制的一个详细流程介绍,里面的步骤以及截图尽可能详细,熟悉restful的盆友可能觉得过于繁琐,新手不妨耐 ...
随机推荐
- Scilab 的画图函数(1)
Scilab 的画图函数 plot 函数 最主要的是 plot 函数,与 matlab 中的plot 函数类似. xdata = linspace(1,10,50); ydata = sin(xdat ...
- 【转】tomcat 访问软连接文件夹下的网页出现404错误,description The requested resource (/xxx.html) is not available.
在 tomcat/webapps/ROOT/ 下建立一个软连接文件ln -s /home/ubuntu/report report 再到report软连接目录里建立个 report.html通过浏 ...
- 【Espruino】NO.03 从点灯开始
http://blog.csdn.net/qwert1213131/article/details/26819773 本文属于个人理解,能力有限,纰漏在所难免,还望指正! [小鱼有点电] 点灯程序应该 ...
- bootstrap使用汇总
//大多数功能都能够指定data属性来指定 但是,有必要的情况下使用jquery由于事件是不同的过程 //活动通常有两种状态show shown 通用和过去的 <!DOCTYPE html> ...
- Android开发技巧——实现在图标文本底部导航栏(更新)
本文参考了导航栏的代码viewpagerindicator实现. 本文介绍了之前版本号qq或者微信,添加文本,实现图标,导航栏的底部. 2014-09-14 13:59:42更新:library的代码 ...
- 定制Attribute
目录 Attribute是什么 自定义Attribute 一.Attribute是什么 将一些附加信息与制定目标相关联的方式.编译器在元数据中生成这些额外的信息.也叫做特性. 比如之前文章中提到的:枚 ...
- c#左右socket连接超时控制方案
之前有一个项目中使用Remoting技术.当远程地址无效或server不执行,访问远程对象的方法,它会经过几十秒的时间来抛出异常秒. 由于我使用tcp状态.因此,认为可以使用socket为了测试连接, ...
- [ACM] ZOJ 3816 Generalized Palindromic Number (DFS,暴力枚举)
Generalized Palindromic Number Time Limit: 2 Seconds Memory Limit: 65536 KB A number that will ...
- mysql位_01检查错误代码的方法
1 看到官方帮助文档 当前最新版本号的错误码见 http://dev.mysql.com/doc/refman/5.7/en/error-handling.html 2 在安装mysql的环境中调用m ...
- USACO dualpal
/* ID:kevin_s1 PROG:dualpal LANG:C++ */ #include <iostream> #include <cstdio> #include & ...