1024程序员节-代码实现自动下载英语听力音频文件

背景

    小马英语,《每天10分钟英语听力-基础篇》,由于音频文件是通过扫码获取播放音频文件的链接页面,这样极为不方便,所以想直接把所有音频文件下载好放在QQ音乐里面,然后像播放歌曲一样来听听力训练。然而,音频链接页面并不提供下载的链接,新东方的音频文件是这样的,有下载按钮:

    小马外语是下面这样的,没有下载按钮:

    网页既然有音频文件播放,那么应该有文件的链接,果断查看网页源代码,果然有音频文件的链接路径,网页路径是:view-source:http://www.cip.com.cn/erweima/xiaoma/29961/29961.html,音频文件源代码如下:

    那么可以知道MP3音频文件路径为:http://www.cip.com.cn/erweima/xiaoma/29961/mp3/16/16-01-01.mp3,点击后出现页面,出现了可下载按钮。

下载

    这本书一共36章,每章5个音频文件,最简单的方法是把mp3文件路径复制到电脑下载软件里,新建下载页面一个个的下载,这样最简单但是文件太多下载效率低,突然想到今天是1024程序员节,何不写个代码自动实现下载呢?

    代码实现思想:一个大循环,循环体里面实现对章节字符串的递增,然后通过启动另外一个进程去下载文件,可以用Linux里面的wget命令。

代码

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>

int main(void)
{
 	int i=-1;
 	int max=1;
 	char *path[1024]={"wget",NULL};

 	path[1]=(char *)malloc(1024);
 	if(NULL == path[1])
 	{
 		printf("NULL == path[1],return!\n");
 		return -1024;
 	}
 	memset(path[1], 0, 1024);

	while(max <= 36)
	{
		for(i=1;i<=5;i++)
		{
			sprintf(path[1],"http://www.cip.com.cn/erweima/xiaoma/29961/mp3/%02d/%02d-%02d-01.mp3", max, max,i);
			if(0 > execv("/usr/bin/wget", path))
			{
				perror("execv");
				return -1024;
			}
		}
		max++;
	}
	return 1024;
}

    只下载了一个文件,因为execv执行成功后不返回,所以改用system,执行完后才返回。

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>

int main(void)
{
 	int i=-1;
 	int max=1;
 	char path[1024]={0,};
 	memset(path, 0, 1024);

	while(max <= 36)
	{
		for(i=1;i<=5;i++)
		{
			sprintf(path,"wget http://www.cip.com.cn/erweima/xiaoma/29961/mp3/%02d/%02d-%02d-01.mp3", max, max, i);
			if(system(path) < 0)
			{
				perror("system");
			}
		}
		max++;

	}
	return 1024;
}

    上面代码执行成功,开始慢慢的自动下载MP3文件了。

猜你喜欢

转载自blog.csdn.net/TSZ0000/article/details/83349928
今日推荐