在这篇文章中。我们将使用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)创建一个最主要的应用


我们还是像曾经一样使用我们的Ubuntu SDK来创建一个最主要的weibo HTML 5应用。



  

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="">


这样我们就创建了一个最主要的weibo HTML 5应用。

你能够使用热键Ctrl + R来执行它尽管它并不能做什么事。







2)增加online account所须要的文件



我们能够參考文章来对online
account API
有更深的了解。为了可以訪问。须要创建例如以下的文件:



1)weibo.application
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <application>
  3. <description>Weibo scope</description>
  4. <desktop-entry>weibo.ubuntu_weibo.desktop</desktop-entry>
  5. <services>
  6. <service id="html5-weibo.ubuntu_html5weibo">
  7. <description>Watch your favorite Weibo messages</description>
  8. </service>
  9. </services>
  10. </application>

2)weibo.service



  1. <?xml version="1.0" encoding="UTF-8"?
  2.  
  3. >
  4. <service>
  5. <type>sharing</type>
  6. <name>Weibo scope</name>
  7. <icon>html5-weibo.png</icon>
  8. <provider>html5-weibo.ubuntu_account-plugin</provider>
  9. <translations>unity-scope-weibo</translations>
  10. </service><strong>
  11. </strong>
3)创建一个plugin文件文件夹并在它的以下创建


 a)Main.qml, 它的内容为:

  1. import Ubuntu.OnlineAccounts.Plugin 1.0
  2.  
  3. OAuthMain {}

b) qml-weibo.ubuntu_plugin.provider,它的内容为:


  1. <?xml version="1.0" encoding="UTF-8"?
  2.  
  3. >
  4. <provider>
  5. <name>Weibo</name>
  6. <icon>weibo.png</icon>
  7. <translations>unity-scope-weibo</translations>
  8. <plugin>generic-oauth</plugin>
  9. <domains>.*weibo\.com</domains>
  10. <single-account>true</single-account>
  11.  
  12. <template>
  13. <group name="auth">
  14. <setting name="method">oauth2</setting>
  15. <setting name="mechanism">web_server</setting>
  16. <group name="oauth2">
  17. <group name="web_server">
  18. <setting name="Host">api.weibo.com</setting>
  19. <setting name="AuthPath">oauth2/authorize</setting>
  20. <setting name="TokenPath">oauth2/access_token</setting>
  21. <setting name="RedirectUri">https://api.weibo.com/oauth2/default.html</setting>
  22. <setting name="ResponseType">code</setting>
  23. <setting name="ClientId">Your developer key</setting>
  24. <setting type="as" name="AllowedSchemes">['https','http']</setting>
  25. <setting name="ClientSecret">Your developer secret</setting>
  26. <setting name="ForceClientAuthViaRequestBody" type="b">true</setting>
  27. </group>
  28. </group>
  29. </group>
  30. </template>
  31. </provider>

在上面的文件里一定要输入自己的“your developer key”及“your developer secret”。这个你须要在微博API的站点上去申请。整个文件的架构为:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvVWJ1bnR1VG91Y2g=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" width="400" height="300" alt="">



4)改动manifest.json文件例如以下

  1. {
  2. "name": "html5-weibo.ubuntu",
  3. "description": "description of html5-weibo",
  4. "architecture": "all",
  5. "title": "html5-weibo",
  6. "hooks": {
  7. "html5weibo": {
  8. "apparmor": "html5weibo.apparmor",
  9. "desktop": "html5weibo.desktop",
  10. "account-application": "weibo.application",
  11. "account-service": "weibo.service"
  12. },
  13. "account-plugin": {
  14. "account-provider": "plugin/html5-weibo.ubuntu_account-plugin.provider",
  15. "account-qml-plugin": "plugin/qml"
  16. }
  17. },
  18. "version": "0.1",
  19. "maintainer": "XiaoGuo, Liu <xiaoguo.liu@canonical.com>",
  20. "framework": "ubuntu-sdk-14.10"
  21. }

这里加入了account及plugin的一些设置。




5)为了可以让.service,.application及.provider文件能正常得到显示,我们对“qml-weibo.qmlproject”加入例如以下的东西

  1. Files {
  2. filter: "*.service"
  3. }
  4. Files {
  5. filter: "*.application"
  6. }
  7. Files {
  8. filter: "*.provider"
  9. }


到这里,我们已经基本上已经改动或加入好我们所须要的文件。


3)设计应用的UI

改动我们的“index.html”文件:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>An Ubuntu HTML5 application</title>
  6. <meta name="description" content="An Ubuntu HTML5 application">
  7. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0">
  8.  
  9. <!--
  10. Application stylesheets
  11. Include your own stylesheets below to style your application.
  12. -->
  13. <link rel="stylesheet" href="css/app.css" type="text/css" />
  14.  
  15. <!--
  16. Ubuntu UI javascript imports - Ambiance theme
  17. 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.
  18. -->
  19. <!-- Ubuntu UI Style imports - Ambiance theme -->
  20. <link href="/usr/share/ubuntu-html5-ui-toolkit/0.1/ambiance/css/appTemplate.css" rel="stylesheet" type="text/css" />
  21. <script src="/usr/share/ubuntu-html5-ui-toolkit/0.1/ambiance/js/fast-buttons.js"></script>
  22. <script src="/usr/share/ubuntu-html5-ui-toolkit/0.1/ambiance/js/core.js"></script>
  23. <script src="/usr/share/ubuntu-html5-ui-toolkit/0.1/ambiance/js/buttons.js"></script>
  24. <script src="/usr/share/ubuntu-html5-ui-toolkit/0.1/ambiance/js/page.js"></script>
  25. <script src="/usr/share/ubuntu-html5-ui-toolkit/0.1/ambiance/js/pagestacks.js"></script>
  26. <script src="/usr/share/ubuntu-html5-ui-toolkit/0.1/ambiance/js/popovers.js"></script>
  27. <script src="/usr/share/ubuntu-html5-ui-toolkit/0.1/ambiance/js/list.js"></script>
  28. <script src="/usr/share/ubuntu-html5-ui-toolkit/0.1/ambiance/js/toolbars.js"></script>
  29. <script src="/usr/share/ubuntu-html5-ui-toolkit/0.1/ambiance/js/tabs.js"></script>
  30. <script src="/usr/share/ubuntu-html5-ui-toolkit/0.1/ambiance/js/shape.js"></script>
  31.  
  32. </head>
  33. <body>
  34.  
  35. <div data-role="mainview">
  36. <header data-role="header">
  37. </header>
  38.  
  39. <div data-role="content">
  40. <div data-role="pagestack">
  41.  
  42. <div data-role="page" id="main" data-title="Weibo Status">
  43.  
  44. <section data-role="list" id="statuslist"></section>
  45.  
  46. <div id='results'></div>
  47. </div> <!-- main -->
  48.  
  49. </div> <!-- pagestack -->
  50. </div> <!-- content -->
  51. </div> <!-- mainview -->
  52.  
  53. <script src="js/app.js"></script>
  54.  
  55. </body>
  56. </html>

这里的UI很easy,我仅仅使用了一个list控件。我们大部分的代码将在“app.js”中实现:


  1. var token = '';
  2.  
  3. window.onload = function () {
  4. console.log("this is so cool....!")
  5.  
  6. var UI = new UbuntuUI();
  7.  
  8. UI.init();
  9. UI.pagestack.push('main');
  10. var api = external.getUnityObject('1.0');
  11. var oa = api.OnlineAccounts;
  12.  
  13. // UI.button('getstatus').click(auth);
  14.  
  15. auth();
  16.  
  17. function auth() {
  18. console.log("getstatus button is clicked!");
  19.  
  20. var filters = {'provider': 'html5-weibo.ubuntu_account-plugin', 'service': ''};
  21.  
  22. oa.api.getAccounts(filters, function(accounts) {
  23. console.log("total length: " + accounts.length);
  24.  
  25. if (accounts.length < 1) {
  26. // setResults('No accounts available');
  27. oa.api.requestAccount(
  28. "html5-weibo.ubuntu_html5weibo",
  29. unescape("html5-weibo.ubuntu_account-plugin"),
  30.  
  31. function() {
  32. console.log("requestAccount callback...");
  33. auth();
  34. });
  35. return;
  36. } else {
  37. // setResults("Available accounts: " + accounts.length);
  38. }
  39.  
  40. function authcallback(res) {
  41. token = res['data']['AccessToken'];
  42. console.log("AccessToken: " + token);
  43. // setResults("AccessToken: " + token);
  44.  
  45. getWeiboStatus(token, function(statuses) {
  46. console.log("the length: " + statuses.length);
  47.  
  48. if (statuses) {
  49. // create the 'ul' element
  50. var ul = document.createElement('ul');
  51. // var results = document.getElementById('results');
  52. var results = document.querySelector('#results');
  53. var statuslist = document.querySelector('#statuslist');
  54. var ul = document.createElement('ul');
  55.  
  56. for (var i = 0; i < statuses.length; i ++) {
  57.  
  58. var li = document.createElement('li');
  59. ul.appendChild(li);
  60.  
  61. var aside = document.createElement('aside');
  62. li.appendChild(aside);
  63.  
  64. var img = document.createElement('img');
  65. img.setAttribute('src', statuses[i]['profile_image_url']);
  66. img.setAttribute('width', "50");
  67. img.setAttribute('height', "50");
  68. aside.appendChild(img);
  69.  
  70. var a = document.createElement('a');
  71. a.setAttribute('href', '#');
  72. a.innerHTML = statuses[i]['text'];
  73. li.appendChild(a);
  74.  
  75. var right = document.createElement('label');
  76. right.innerHTML = ""
  77. li.appendChild(right);
  78.  
  79. }
  80.  
  81. console.log("it is done6");
  82. statuslist.appendChild(ul);
  83. }
  84. else {
  85. setResults('<br><br>ERROR');
  86. }
  87. });
  88. }
  89.  
  90. accounts[0].authenticate(authcallback);
  91. }); //getAccounts
  92. } //auth
  93.  
  94. function getWeiboStatus(accessToken, callback) {
  95. var http = new XMLHttpRequest()
  96. var url = "https://api.weibo.com/2/statuses/home_timeline.json?access_token=" + accessToken + "&page=" + 1
  97.  
  98. console.log('url: \n' + url)
  99.  
  100. http.open("GET", url, true);
  101. var statuses = [];
  102. http.onreadystatechange = function() {
  103. if (http.readyState === 4){
  104. if (http.status == 200) {
  105. var response = JSON.parse(http.responseText);
  106. console.log("it succeeds! lenght: " );
  107.  
  108. for (i = 0; i < response['statuses'].length; i++ ) {
  109. var time = JSON.stringify(response['statuses'][i]['created_at']);
  110. // console.log("time: " + time );
  111.  
  112. var text = JSON.stringify(response['statuses'][i]['text']);
  113. // console.log("text: " + text);
  114.  
  115. var name = JSON.stringify(response['statuses'][i]['user']['name']);
  116. // console.log("name: " + name);
  117.  
  118. var profile_image_url = JSON.stringify(response['statuses'][i]['user']['profile_image_url']);
  119. profile_image_url = profile_image_url.slice(1, profile_image_url.length-1);
  120. // console.log("profile_image_url: " + profile_image_url);
  121.  
  122. var id = JSON.stringify(response['statuses'][i]['idstr']);
  123.  
  124. statuses.push({'time': time,
  125. 'text': text,
  126. 'name': name,
  127. 'id': id,
  128. 'profile_image_url': profile_image_url});
  129. }
  130.  
  131. callback(statuses);
  132.  
  133. } else {
  134. console.log("error: " + http.status)
  135. callback(null);
  136. }
  137. }
  138. };
  139. http.send(null);
  140. }
  141.  
  142. function setResults(data) {
  143. var results = document.getElementById('results');
  144. results.innerHTML = data;
  145. };
  146.  
  147. }; //onload

我们能够使用例如以下的句子来得到online account API的接口:


  1. var api = external.getUnityObject('1.0');
  2. var oa = api.OnlineAccounts;


在这里,我们使用HTML 5的online account API来检查是否有例如以下的provider:

  1. var filters = {'provider': 'html5-weibo.ubuntu_account-plugin', 'service': ''};

假设没有。我们使用例如以下的代码来创建weibo账号:


  1. if (accounts.length < 1) {
  2. // setResults('No accounts available');
  3. oa.api.requestAccount(
  4. "html5-weibo.ubuntu_html5weibo",
  5. unescape("html5-weibo.ubuntu_account-plugin"),
  6.  
  7. function() {
  8. console.log("requestAccount callback...");
  9. auth();
  10. });
  11. return;
  12. }

等创建成功了,我们使用“auth()”来得到訪问weibo的access token。进而我们能够得到我们所须要的不论什么的信息。


被创建的账号,能够在“系统设置”里的“账号”中能够看到:



另外我们能够在手机或模拟器中的例如以下的文件夹中看到我们所创建的文件:



整个项目的源代码在:git clone https://gitcafe.com/ubuntu/html5weibo.git

版权声明:本文博主原创文章,博客,未经同意不得转载。

如何使用Ubuntu online account API创建微博HTML5申请书的更多相关文章

  1. [PHP] 调用微博API 发微博OAuth2.0

    在实际测试中出现很多问题, 第一就是按照文档调用ACCESS_TOKEN的时候费老劲啦,因为是编辑线上的,有好多中文空格,没有看出来!整了好久! 第二个就是在调用api发微博的时候出现乱码!必须把发送 ...

  2. 使用Azure REST API创建虚拟机

    Hollis Yao, Shihao Rong  使用REST API创建虚拟机之前,首先要确保Azure订阅中已经建好了"云服务"和"存储账号".如果没有的话 ...

  3. 使用hbase的api创建表时出现的异常

    /usr/lib/jvm/java-7-openjdk-amd64/bin/java -Didea.launcher.port=7538 -Didea.launcher.bin.path=/usr/l ...

  4. (译)iPhone: 用公开API创建带小数点的数字键盘 (OS 3.0, OS 4.0)

    (译)iPhone: 用公开API创建带小数点的数字键盘 (OS 3.0, OS 4.0) 更新:ios4.1现在已经将这个做到SDK了.你可以设置键盘类型为UIKeyboardTypeDecimal ...

  5. JavaEE Tutorials (11) - 使用Criteria API创建查询

    11.1Criteria和Metamodel API概述16811.2使用Metamodel API为实体类建模170 11.2.1使用元模型类17011.3使用Criteria API和Metamo ...

  6. 使用Win32 API创建不规则形状&带透明色的窗口

    前一阵突然想起了9月份电面某公司实习时的二面题,大概就是说怎么用Win32 API实现一个透明的窗口,估计当时我的脑残答案肯定让面试官哭笑不得吧.所以本人决定好好研究下这个问题.经过一下午的摸索,基本 ...

  7. Revit通过API创建共享参数

    Revit共享参数是通过创建一个.txt类型的文件来保存相关信息,一旦与项目保存完毕之后,共享参数也就变成了项目参数(项目参数无法通过API创建),项目参数是保存在Revit项目里面的,所以此时这个. ...

  8. 在Ubuntu 12.04下创建eclipse的桌面链接

    在Ubuntu 12.04下创建eclipse的桌面链接 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 在Ubuntu 12.04上安装Hadoop并 ...

  9. Yii2 restful api创建,认证授权以及速率控制

    Yii2 restful api创建,认证授权以及速率控制 下面是对restful从创建到速率控制的一个详细流程介绍,里面的步骤以及截图尽可能详细,熟悉restful的盆友可能觉得过于繁琐,新手不妨耐 ...

随机推荐

  1. Scilab 的画图函数(1)

    Scilab 的画图函数 plot 函数 最主要的是 plot 函数,与 matlab 中的plot 函数类似. xdata = linspace(1,10,50); ydata = sin(xdat ...

  2. 【转】tomcat 访问软连接文件夹下的网页出现404错误,description The requested resource (/xxx.html) is not available.

    在 tomcat/webapps/ROOT/ 下建立一个软连接文件ln -s /home/ubuntu/report report   再到report软连接目录里建立个 report.html通过浏 ...

  3. 【Espruino】NO.03 从点灯开始

    http://blog.csdn.net/qwert1213131/article/details/26819773 本文属于个人理解,能力有限,纰漏在所难免,还望指正! [小鱼有点电] 点灯程序应该 ...

  4. bootstrap使用汇总

    //大多数功能都能够指定data属性来指定 但是,有必要的情况下使用jquery由于事件是不同的过程 //活动通常有两种状态show shown 通用和过去的 <!DOCTYPE html> ...

  5. Android开发技巧——实现在图标文本底部导航栏(更新)

    本文参考了导航栏的代码viewpagerindicator实现. 本文介绍了之前版本号qq或者微信,添加文本,实现图标,导航栏的底部. 2014-09-14 13:59:42更新:library的代码 ...

  6. 定制Attribute

    目录 Attribute是什么 自定义Attribute 一.Attribute是什么 将一些附加信息与制定目标相关联的方式.编译器在元数据中生成这些额外的信息.也叫做特性. 比如之前文章中提到的:枚 ...

  7. c#左右socket连接超时控制方案

    之前有一个项目中使用Remoting技术.当远程地址无效或server不执行,访问远程对象的方法,它会经过几十秒的时间来抛出异常秒. 由于我使用tcp状态.因此,认为可以使用socket为了测试连接, ...

  8. [ACM] ZOJ 3816 Generalized Palindromic Number (DFS,暴力枚举)

    Generalized Palindromic Number Time Limit: 2 Seconds      Memory Limit: 65536 KB A number that will ...

  9. mysql位_01检查错误代码的方法

    1 看到官方帮助文档 当前最新版本号的错误码见 http://dev.mysql.com/doc/refman/5.7/en/error-handling.html 2 在安装mysql的环境中调用m ...

  10. USACO dualpal

    /* ID:kevin_s1 PROG:dualpal LANG:C++ */ #include <iostream> #include <cstdio> #include & ...