<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>nodejs &#8211; 悠然居</title>
	<atom:link href="https://wordpress.youran.me/tag/nodejs/feed/" rel="self" type="application/rss+xml" />
	<link>https://wordpress.youran.me</link>
	<description>极客技术博客</description>
	<lastBuildDate>Sat, 20 Aug 2016 17:07:41 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.4</generator>
	<item>
		<title>几段黄牛脚本</title>
		<link>https://wordpress.youran.me/scripts-for-yellowbull/</link>
					<comments>https://wordpress.youran.me/scripts-for-yellowbull/#respond</comments>
		
		<dc:creator><![CDATA[youran]]></dc:creator>
		<pubDate>Sat, 20 Aug 2016 16:56:05 +0000</pubDate>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[nodejs]]></category>
		<category><![CDATA[yellowbull]]></category>
		<guid isPermaLink="false">https://wordpress.youran.me/?p=650</guid>

					<description><![CDATA[剁手族有一个共同特点，就是爱贪便宜，看到性价比高的东西就忍不住买买买。因此最痛苦的莫过于错过了期待已久的促销活动。黄牛也是一样，不搞个自动化脚本抢货，怎么能算是合格的黄牛？前段时间抢Kimsufi独服的时候，使用了第三方的监视网站，尝到了点甜头，加之自己在其他网站也有类似的需求，因此自己写了两段脚本，实现有货时实时推送手机通知，从此站在黄牛第一线！ 先给脚本地址： https://github.com/youran/yellowbull 分别实现了get和post方式的轮询。对应的服务是Kimsufi的独服和BudgetNode的VPS，很容易改造成对应其他服务。 因为使用了ES6语法，需要Nodejs 6.x以上版本才可运行。 脚本很简单，不再分析代码了。只说几点使用事项。 GET版本适用于最简单的场景，即不停地刷订单页面，直至出现特定文字。这里选择了Kimsufi有货时候的&#8221;I would appreciate delivery&#8221;，如下图： GET请求里的那些header数据，可以事先使用浏览器访问一下那个url后取得。 POST版本则是用于测试优惠码是否可用。 这里以最近BudgetNode的双倍硬盘空间优惠为例，首先通过他们的订购链接到达shopping cart页面，在这里可以应用优惠码。这时先打开浏览器的F12工具，然后填入DOUBLEDISK这个优惠码，点击Validate Code按钮后，可以看到优惠码正常生效了： 看看刚才的POST请求： 主要关注&#8221;cookie&#8221;，&#8221;origin&#8221;，&#8221;referer&#8221;这些http header，以及post body。在我们的黄牛代码里也要复制这些数据，以模拟浏览器刚才的请求。 最后，这里使用了pushbullet这个多平台推送软件。它提供了一个API，可以通过这个api将数据实时推送到你的设备上。 为此需要先登录到pushbullet，在后台设置选项里，创建自己的access token： 然后将生成的值拷贝到代码里的token变量中。 检测到有货时候的手机通知如下图： Todo: 自动下单功能。这个因为每个服务都不一样，没有通用性，等有兴致的时候再说吧。 本文为悠然居(https://wordpress.youran.me/)的原创文章，转载请注明出处！]]></description>
		
					<wfw:commentRss>https://wordpress.youran.me/scripts-for-yellowbull/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>A simple RESTful web service in nodejs (3)</title>
		<link>https://wordpress.youran.me/a-simple-restful-web-service-in-nodejs-3/</link>
					<comments>https://wordpress.youran.me/a-simple-restful-web-service-in-nodejs-3/#respond</comments>
		
		<dc:creator><![CDATA[youran]]></dc:creator>
		<pubDate>Sat, 02 Apr 2016 15:50:37 +0000</pubDate>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[ffmpeg]]></category>
		<category><![CDATA[nodejs]]></category>
		<guid isPermaLink="false">https://wordpress.youran.me/?p=623</guid>

					<description><![CDATA[wget.js完成后，只剩下最后一步了：视频文件的转码与合并。ffmpeg的安装就不赘述了，我是根据ffmpeg官网上的教程一步步编译安装的。用yum或者apt-get方式应该也行，就是版本可能没有那么新。 这个进程的主要功能是把flv等格式的视频，转换成标准mp4视频，并且合并成一个文件。一般来说，flv的视频编码和mp4同是h264,而音频编码往往不一致。所以flv转mp4大部分情况下可以直接copy视频流，只需要转换音频流。像B站那种，经常flv连音频流也是aac的，那就更简单了，只换个container就行。 可以借用下面两张图片直观地说明一下： 一开始其实想用exec()直接通过linux命令行执行ffmpeg各种命令的，但是不好处理执行结果的返回以及和主进程的状态通信，所以还是用了一个叫node-fluent-ffmpeg的module，它提供了一层API方便调用(但是用下来感觉并不方便&#8230;)，最重要的是可以从主进程fork()了。 注意fluent-ffmpeg有个问题，即当你没有使用ffmpeg默认的audio encoder，而是使用libfdk_aac这种的话，输出音频质量设定的参数名是不一样的！这样就造成了.audioQuality()方法不起作用，因为那里是写死了用&#8221;-aq&#8221;的。详情见一则Github的issue。 解决方案有两个，一是把fluent-ffmpeg代码中lib/options/audio.js的下面这行 this._currentOutput.audio('-aq', quality); 改成 this._currentOutput.audio('-vbr', quality); 或者不用.audioQuality()，直接用.outputOptions()来指定相应参数。我这里选择前者。 下面开始正题。首先还是从server.js取得参数，这次是已下载的视频文件路径信息(server.js向ffmpeg.js传递了俩参数，id和视频数量)。 var ffmpeg = require('fluent-ffmpeg'); var myArgs = process.argv.slice(2); var taskId = myArgs[0]; var num = myArgs[1]; var curDir = './tasks/' + &#8230;]]></description>
		
					<wfw:commentRss>https://wordpress.youran.me/a-simple-restful-web-service-in-nodejs-3/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>A simple RESTful web service in nodejs (2)</title>
		<link>https://wordpress.youran.me/a-simple-restful-web-service-in-nodejs-2/</link>
					<comments>https://wordpress.youran.me/a-simple-restful-web-service-in-nodejs-2/#respond</comments>
		
		<dc:creator><![CDATA[youran]]></dc:creator>
		<pubDate>Sat, 02 Apr 2016 15:50:30 +0000</pubDate>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[nodejs]]></category>
		<category><![CDATA[wget]]></category>
		<guid isPermaLink="false">https://wordpress.youran.me/?p=622</guid>

					<description><![CDATA[书接上回。完成了server.js，这次轮到子进程wget.js了。wget.js比较简单，只是调用wget-improved module的方法，处理下message就行了。 var wget = require('wget-improved'); // retrieve arguments from parent process var myArgs = process.argv.slice(2); var url = myArgs[0]; var path = './tasks/' + myArgs[1] + '-' + myArgs[2] + '.tmp'; var options = &#8230;]]></description>
		
					<wfw:commentRss>https://wordpress.youran.me/a-simple-restful-web-service-in-nodejs-2/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>A simple RESTful web service in nodejs (1)</title>
		<link>https://wordpress.youran.me/a-simple-restful-web-service-in-nodejs-1/</link>
					<comments>https://wordpress.youran.me/a-simple-restful-web-service-in-nodejs-1/#respond</comments>
		
		<dc:creator><![CDATA[youran]]></dc:creator>
		<pubDate>Sat, 02 Apr 2016 15:50:20 +0000</pubDate>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[mongodb]]></category>
		<category><![CDATA[nodejs]]></category>
		<category><![CDATA[restful]]></category>
		<category><![CDATA[videomerger]]></category>
		<guid isPermaLink="false">https://wordpress.youran.me/?p=620</guid>

					<description><![CDATA[这段时间突然对nodejs有点兴趣，虽然之前完全没有接触过，不过本着实践出真知的精神，四处查阅资料，做出了一个小轮子——videomerger，接收数个视频文件的url，在服务器端下载后合并(以及可能的转码)，然后把合并后文件的链接返回给用户下载。配合分析各种视频网站真实下载地址的脚本，可以实现用户输入视频播放地址后，得到合并后的单文件视频下载(类似clipconverter.cc)。 做的东西时间长了容易忘掉，于是写个文章帮助记忆，也分享一下思路。 代码已开源： https://github.com/youran/videomerger 代码写得很随意，基本功能实现了就好，等我有兴致了再整整。轮子再破也是轮子嘛，哈哈。 如果有什么问题、建议或者发现bug，可以在Github上发issue讨论。 首先是服务器环境的搭建： 安装nodejs。这里选择从官网直接下载二进制包安装： # wget http://nodejs.org/dist/latest-v0.12.x/node-v0.12.12-linux-x64.tar.gz # tar --strip-components 1 -xzvf node-v* -C /usr/local 安装MongoDB： # rpm --import https://www.mongodb.org/static/pgp/server-3.2.asc # vim /etc/yum.repos.d/mongodb-org-3.2.repo [mongodb-org-3.2] name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/amazon/2013.03/mongodb-org/3.2/x86_64/ gpgcheck=1 enabled=1 # yum &#8230;]]></description>
		
					<wfw:commentRss>https://wordpress.youran.me/a-simple-restful-web-service-in-nodejs-1/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>

<!--
Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/?utm_source=w3tc&utm_medium=footer_comment&utm_campaign=free_plugin

Object Caching 31/65 objects using Disk
Page Caching using Disk: Enhanced 
Database Caching using Disk

Served from: wordpress.youran.me @ 2026-11-11 06:57:56 by W3 Total Cache
-->