文档章节

AngularJS+Satellizer+Node.js+MongoDB->Instagram-15

开源中国匿名会员
 开源中国匿名会员
发布于 2015/02/02 07:51
字数 642
阅读 82
收藏 0

Build an Instagram clone with AngularJS, Satellizer, Node.js and MongoDB

#15.Instagram API 端点

本节中我们实现三个新的路由:

  • 获取认证用户的更新。
  • 获取指定 id 的 Instagram 媒体。
  • 认证用户给特定媒体点赞。

在开始写代码之前,需要找出对应的端点。访问 Instagram API endpoints 来查看 API 端点列表。除了能知道你应该使用什么参数来访问特定端点外,你还可以知道端点会给你返回的对象结构,我觉得这对每个 API 供应商默认都应该有。我觉得有一个样板 API 响应对于前端开发非常有用。比如说,我如果没有拿到 Instagram 的认证令牌的话,我就不知道图像对象的结构到底是什么。

<!-- lang: js -->
<img ng-src="{{photo.images.standard_resolution.url}}" class="thumbnail img-responsive">

https://hackhands.com/wp-content/uploads/2014/11/Screenshot-2014-11-09-23.31.06.png

<!-- lang: js -->
app.get('/api/feed', isAuthenticated, function(req, res) {
  var feedUrl = 'https://api.instagram.com/v1/users/self/feed';
  var params = { access_token: req.user.accessToken };
 
  request.get({ url: feedUrl, qs: params, json: true }, function(error, response, body) {
    if (!error && response.statusCode == 200) {
      res.send(body.data);
    }
  });
});

注意上面代码的 isAuthenticated 中间件。它防止了那些非认证路由访问。如果你没有注册,然后妄图访问 http://localhost:3000/api/feed 的话,你会拿到下面这样的异常信息:

https://hackhands.com/wp-content/uploads/2014/11/Screenshot-2014-11-09-23.43.51.png

我们的第二个路由会用给定的媒体 id 去获取媒体对象:

<!-- lang: js -->
app.get('/api/media/:id', isAuthenticated, function(req, res, next) {
  var mediaUrl = 'https://api.instagram.com/v1/media/' + req.params.id;
  var params = { access_token: req.user.accessToken };
 
  request.get({ url: mediaUrl, qs: params, json: true }, function(error, response, body) {
    if (!error &amp;amp;amp;&amp;amp;amp; response.statusCode == 200) {
      res.send(body.data);
    }
  });
});

你可能已经意识到了,这个项目里明显的就是零验证和异常处理。这是故意的,因为我们的主要目的是做一个用户授权的练习。如果你希望把这个代码放到生产中去的话,你应该加上 404 响应,然后在 Angular 中处理并显示 404 页面或者做什么相似的处理的。

我的最后一个 API 路由是允许授权用户点赞:

<!-- lang: js -->
app.post('/api/like', isAuthenticated, function(req, res, next) {
  var mediaId = req.body.mediaId;
  var accessToken = { access_token: req.user.accessToken };
  var likeUrl = 'https://api.instagram.com/v1/media/' + mediaId + '/likes';
 
  request.post({ url: likeUrl, form: accessToken, json: true }, function(error, response, body) {
    if (response.statusCode !== 200) {
      return res.status(response.statusCode).send({
        code: response.statusCode,
        message: body.meta.error_message
      });
    }
    res.status(200).end();
  });
});

Instagram 只允许每个令牌对它们的 API 每小时做 5,000 次请求。如果你超过这个限制,你会拿到个超速限制异常。我们用 SweetAlert.js 在客户端做异常信息显示。当用户在拿到超速限制之后尝试继续访问 API 的时候显示异常信息。

© 著作权归作者所有

开源中国匿名会员
粉丝 78
博文 104
码字总数 113453
作品 2
徐汇
技术主管
私信 提问
AngularJS+Satellizer+Node.js+MongoDB->Instagram-20

[Build an Instagram clone with AngularJS, Satellizer, Node.js and MongoDB][1] 20.部署 在 instagrame 目录下创建一个新的文件 .gitignore,把 node_modules 加到它里面。你可以直接用命......

开源中国匿名会员
2015/02/02
370
0
AngularJS+Satellizer+Node.js+MongoDB->Instagram-21

[Build an Instagram clone with AngularJS, Satellizer, Node.js and MongoDB][1] 21.总结 完结撒花!这是我那些年写过的最长的贴了。搞笑的是,我在 [TV Show Tracker blog post][2] 里面也...

开源中国匿名会员
2015/02/02
226
0
Facebook 遭遇今年第三次严重宕机事件

新浪科技讯,北京时间 4 月 15 日上午消息,据彭博社报道,Facebook 遭遇了今年第三次严重宕机事件,全球用户暂时无法访问该社交网络或其服务,如 Facebook Messenger、Instagram 和 WhatsA...

linux-tao
05/06
6
0
揭秘 Instagram 的 13 人团队和 9 位投资人

拍照分享应用Instagram刚刚被Facebook以10亿美元的现金和股票收购。但是你知道吗,Instagram创立仅551天,团队只有13个人,其中两位还是在上个月的SXSW期间加入。而背后的9位神秘投资人同样扮...

虫虫
2012/04/10
1K
15
Facebook 宣布 10 亿美元收购 Instagram

【搜狐IT消息】4月10日消息,Facebook宣布将以10亿美元收购在线照片共享服务商Instagram。 据华尔街日报消息,Facebook已经与Instagram达成协议,将以10亿美元现金和股票收购后者。这意味着在...

红薯
2012/04/10
2.2K
9

没有更多内容

加载失败,请刷新页面

加载更多

Handler简解

Handler 这里简化一下代码 以便理解 Handler不一定要在主线程建 但如Handler handler = new Handler(); 会使用当前的Looper的, 由于要更新UI 所以最好在主线程 new Handler() { mLooper = Lo...

shzwork
4分钟前
0
0
h5获取摄像头拍照功能

完整代码展示: <!DOCTYPE html> <head> <title>HTML5 GetUserMedia Demo</title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum......

诗书易经
7分钟前
0
0
正向代理和反向代理

文章来源 运维公会:正向代理和反向代理 1、正向代理 (1)服务对象不同 正向代理服务器的服务对象是客户端,可以将客户端和代理服务器看作一个整体。 (2)配置方法不同 需要在客户端配置代...

运维团
23分钟前
2
0
5个避免意外论文重复率高的方法

即使你不是故意抄袭,但你可能在无意中抄袭了别人的论文, 这个叫做意外抄袭,它可能正发生在你身上,如果你不熟悉学术 道德规范,这里将告诉你5个基本的方法来避免意外抄袭。 Tip1 熟悉其他...

论文辅导员
25分钟前
2
0
Maven通过profiles标签读取不同的配置

<profiles> <profile> <id>dev</id> <properties> <profiles.active>dev</profiles.active> </properties> ......

时刻在奔跑
30分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部