c写的获取音乐url

来源:互联网 发布:spss数据分析教程ppt 编辑:程序博客网 时间:2024/06/05 21:12

今天有时间来完善一下!

 

#include<stdio.h>
#include<windows.h>
#include<malloc.h>
#include<string.h>
#include <wininet.h>
#define MAXBLOCKSIZE 1024

#pragma comment(lib, "wininet.lib")

 

 

  __inline void Utf8ToGb2312(const char *pcUtf8, char *strGB2312)//主要是因为大部分的网页都是uf-8编码,我们处理的是gb2312,所以要做一下转码

  {
   int nUnicodeLen = MultiByteToWideChar(CP_UTF8, 0, pcUtf8, -1, NULL, 0);//这是一个api函数,又来处理编码转换的,wingdowns程序设计里面有详细讲解

   wchar_t * pcUnicode = new wchar_t[nUnicodeLen+1];
   memset(pcUnicode, 0, nUnicodeLen * 2 + 2);


   MultiByteToWideChar(CP_UTF8, 0, pcUtf8, -1, pcUnicode, nUnicodeLen);//中间做一个转换,把uf-8转换成宽字符,再转换成gb2312

   int nGb2312Len = WideCharToMultiByte(CP_ACP, 0, pcUnicode, -1, NULL, 0, NULL, NULL);

   char *pcGb2312=new char[nGb2312Len + 1];
   memset(pcGb2312, 0, nGb2312Len + 1);

   WideCharToMultiByte(CP_ACP, 0, pcUnicode, -1, pcGb2312, nGb2312Len, NULL, NULL);

   strcpy(strGB2312,pcGb2312);
   delete[] pcGb2312;
   delete[] pcUnicode;
  }


 
 

 


 void GetWebSrcCode(const char *Url)//发送请求,下载自己需要的页面
{
 HINTERNET hSession = InternetOpen("down", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
 if (hSession != NULL)
 {
  HINTERNET hURL = InternetOpenUrl(hSession, Url, NULL, 0, INTERNET_FLAG_DONT_CACHE, 0);
  if (hURL != NULL)
  {
   char Temp[MAXBLOCKSIZE] = {0};
   ULONG Number = 1;

   FILE *stream;
   if( (stream = fopen( "E:\\test.html", "w" )) != NULL )
   {
    while (Number > 0)
    {
     InternetReadFile(hURL, Temp, MAXBLOCKSIZE - 1, &Number);
     fwrite(Temp, sizeof (char), Number , stream);
    }
    fclose( stream );
   }

   InternetCloseHandle(hURL);
   hURL = NULL;
  }
  else
     printf("网络连接错误!请查看网络是否连接!");

  InternetCloseHandle(hSession);
  hSession = NULL;
 }
}

 

 

 


int  geturl()//还是搜索,比较烦人,现在网站都是多级掩饰,只有接着搜索啊!百度音乐会更烦人!
{
   FILE *fp;
   char *src;
   char *src2;
   char m[]={"歌曲出处"};
   int i=0,j=0,k=0;

 

   fp=fopen("E:\\test.html","r");
   if(NULL!=fp)
   {
     fseek(fp,0,SEEK_END);
  long L=ftell(fp);
     src=(char *)malloc(L/2);
  src2=(char *)malloc(L/2);
  memset(src,0,L/2);
  memset(src2,0,L/2);
     fseek(fp,L/2,SEEK_SET);
     fread(src,L/2,1,fp);
      Utf8ToGb2312(src,src2);
   
  // printf("%s",src2);
      //printf("\n\n\n\n");

 


  
  

 while(i<strlen(src2))
 {
  
   if(src2[i]==m[j])
   {
    i++;
    j++;
   }

   else
   {
    i=i-j+1;
    j=0;
   }
    
     
     if(j>=strlen(m))
  {
    k=i;
    j=0;


    int fl=0;
       int fm=0,fa=0;
       int num=0;
       char geturl[100];
    FILE *wr;
    wr=fopen("E:\\test.txt","a");
       memset(geturl,0,100);


      while(1)
    {
   num++;
      if(src2[k]=='h'  &&  src2[k+1]=='t'  &&  src2[k+2]=='t'  &&  src2[k+3]=='p')
   { 
    fl++;
   }
        

   if(src2[k]=='m'  &&  src2[k+1]=='p'  &&  src2[k+2]=='3')
    {
      fl++;
    }

 


   if(fl)
   {
     if(fl==1)
     {
      geturl[fa++]=src2[k];
     }


     if(fl==2)
     {
      geturl[fa++]='m';
      geturl[fa++]='p';
      geturl[fa++]='3';
      geturl[fa++]='\n';
      printf("%s",geturl);
      fwrite(geturl,strlen(geturl),1,wr);
      fm=1;
      break;
     }
  

     if(num>200)
      break;
   }

   k++;

   }
    
   fclose(wr);
     if(fm)
  break;
  }

 

 }
   }
 

   return 0;
}

 

 

 


int    findstr(char *res,char *mode)//这里就不不罗嗦啦,就是一个简单的搜索算法,你用strstr()会更加简洁
{

    //printf("%s",res);
 int i=0,j=0,k=0,m=0;

 int flag=0;

 char p[200];
 char buff[200];
      memset(p,0,200);
   memset(buff,0,200);


 while(i<strlen(res))
 {
   if(res[i]==mode[j])
   {
    i++;
    j++;
   }

   else
   {
    i=i-j+1;
    j=0;
   }


   if(j>=strlen(mode))
   {
   j=0;
   flag=0;
   k=0;

  
  for(m=i-180;m<i;m++)
  {
    if(res[m]=='\'')
    {
      flag++;
    }
         
    if(flag==1&&res[m]!='\'')
    {
     p[k++]=res[m];
          
    }
         
  

    if(flag!=0&&flag!=1)
    {
     sprintf(buff,"http://music.yahoo.cn/%s",p);
     GetWebSrcCode(buff);
     geturl();
     //printf("%s",p);
     //printf("\n\n\n");
     break;
    }

     
  }
   }
 }
  return 0;
}

 

int main()
{
   char *text;
   char *t;
   FILE *fp;
   int l;
   char f[]="爱情";
 

   GetWebSrcCode("http://music.yahoo.cn/s?from=suggest&q=爱情");//大家可以根据自己的分析网页,这个事我分析雅虎搜索的
   fp=fopen("E:\\test.html","r");

   if(fp!=NULL)
   {
   fseek(fp,0,SEEK_END);
   long len=ftell(fp);
      text=(char *)malloc(len+1);
   t=(char *)malloc(len+1);
   memset(text,0,len+1);
   fseek(fp,len*1/3,SEEK_SET);//这里是一次性程序,我就全部写入内存
   fread(text,len,1,fp);
        Utf8ToGb2312(text,t);

//其实这里不必这么写,就是把自己搜索的词组转换成uf-8,再到网页上搜索,这样会很快!这里主要是我要使用网页里面的数据

//用这则表达式匹配会简单一些,当然不想用,你嵌入lua脚本搜索也是很好的。我个人比较喜欢lua,因为小,而且效率很不错!
   //printf("%s",t);
   }

  l=findstr(t,f);
  

return 0;
}

 

写的比较粗糙,,有事要做!

下下来记着,有时间了来整理!

原创粉丝点击