LINUX.ORG.RU

[php][vk][парсер музыки] Как получить страницу с музыкой, без редиректов


0

0

вообщем, пишу на достуге парсер музыки для контакта... знаю знаю что контакт это зло...но музыки там много...

<?php

#var_dump($_REQUEST);

if(!isset($_GET['id']) or !is_numeric($_GET['id']))
{
die("Error ID format");
}

function output_r ($host,$page,$data){

    if ($page==''){$page='/';}
    if($host == "vkontakte.ru"){
        $proxy = "*****"; // адрес первой прокси
        $port=8888;
    }else{
    $proxy="192.168.5.2";  // адрес другой прокси
    $port=3128;
    }
    $fp = fsockopen ($proxy, $port, $errno, $errstr, 30);
    if (!$fp){
        return "Error ";
    }
    $request = "GET http://$host/{$page}?{$data} HTTP/1.0\r\n";
    $request .= "Host: $host\r\n";
    $request .= "Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1\r\n";
    $request .= "Accept-Encoding: none, *;q=0\r\n";
    $request .= "Accept-Language: ru\r\n";
    $request .= "Connection: close\r\n";
    $request .= "Proxy-Connection: close\r\n";
    $request .= "Cookie: remixlang=0; remixmid=*****; remixemail=******; remixpass=".md5("*******")."; remixclosed_tabs=*********; remixchk=5; remixsid=**************\r\n";

    $request .= "Referer: http://$host/?$data\r\n";
    $request .= "User-Agent: Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.2.15 Version/10.10\r\n";
    #$request .= "\r\n";

    #$request .= "$data\r\n";
    $request .= "\r\n";
    var_dump($request);




    @fwrite ($fp,$request);
$out="";
   while (!feof($fp)) {
          $out .= fgets($fp, 128);
     }

return $out;



}


############ Вызов функций
if(!isset($moz))
{
$zzz=output_r("vkontakte.ru","audio.php","id=".$_GET['id']);

#$zzz=iconv("CP1251","UTF-8",$zzz);
var_dump($zzz);
}



?>

дык эта сволочь возвращает какой-то [consored] редирект...через жаба-скрипт... в чем ошибка? в каком месте запроса...а то мозг сломал уже.... нужно получить ХТМЛ страничку с музыкой

★★

редирект сначало идет на логин, потом на страницу(не на музыку 0_о)

kam ★★ ()
Ответ на: комментарий от kam

дорогой лор, я хочу решить некую задачу. для этого я написал страницу кода. но он не работает...

trashymichael ★★★ ()

вполне возможно в js ajax используется. Следовательно я бы для начала посмотрел как общается с вк обычный браузер, а уже оттуда отталкивался бы.

fjfalcon ★★★ ()

При логине remixsid генерируется заново через JS, так что иного способа кроме как запускать браузер и выдёргивать этот remixsid из его базы я пока не вижу.

Cancellor ★★★★☆ ()
Ответ на: комментарий от Cancellor

интерпретировать жабаскрипт до нужных результатов?

dimon555 ★★★★★ ()

Ты самостоятельно тягаешь странички через сокеты из принципа, от незнания, или от лени разбираться с curl или PEAR HTTP_Request?

function http_get($url)
{
    $ch = curl_init($url);
    curl_setopt_array($ch, array(
        CURLOPT_TIMEOUT => 5,
        CURLOPT_FOLLOWLOCATION => true,
        CURLOPT_MAXREDIRS => 3,
        CURLOPT_ENCODING => 'gzip, deflate',
//      CURLOPT_REFERER => $url,
        CURLOPT_AUTOREFERER => true,
        CURLOPT_USERAGENT => 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; FunWebProducts; .NET CLR 1.1.4322; .NET CLR
        CURLOPT_RETURNTRANSFER => true,
    ));

    if(preg_match("!lenta\.ru!", $url))
        curl_setopt($ch, CURLOPT_PROXY, 'myproxy.ru:3128');

    $data = curl_exec($ch);

//  var_dump($data);

    curl_close($ch);

    return $data;
}

KRoN73 ★★★★★ ()
Ответ на: комментарий от KRoN73

проблема понятна, жабаскрипт может дописывать на страницу ещё жабаскрипта и передавать на него управление, при этом получать он порции жабаскрипта может черз xmlhttprequest и дом вертеть, как угодно.

понятно, что под всякое изменение цсс можно заглушку подсовывать, но как отловить нужный жабаскрипт от ненужного это вопрос.

dimon555 ★★★★★ ()

Что только не делают люди, лишь бы не учить перл.

#!/usr/bin/env perl
use strict;
use warnings;

use Data::Dumper;
use LWP::UserAgent;
use HTTP::Cookies;
use HTML::Entities;

my $cookie_jar = HTTP::Cookies->new(
    file => "./cookies.txt",
    autosave => 1,
);

my $ua = LWP::UserAgent->new;
my @form = {
    email => 'email@gmail.com',
    pass=> 'password'
};
push @{ $ua->requests_redirectable }, 'POST';
$ua->timeout(100);
$ua->agent('Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1');
$ua->cookie_jar($cookie_jar);
my $response=$ua->post('http://vkontakte.ru/login.php',\@form);
if ($response->is_success) {
    my $res=$ua->get('http://vkontakte.ru/gsearch.php?q=cardigans&section=audio');
    if ($res->is_success) {
        my $cont=$res->content;
        my %links;
        my $perf;

        $cont=~s/<a href='javascript: showLyrics\([0-9]*,[0-9]*\);'>(.+?)<\/a>/$1/g;
        while ($cont=~m/performer([0-9]*)">(.+?)<\/b> - <span id="title[0-9]*">(.+?)<\/span>/)
        {
            $perf=decode_entities($2)." - ".decode_entities($3);
            $links{"$1"}{"perf"}=$perf;
            $cont=~s/<b id="performer[0-9]*">(.*?)<\/b> - <span id="title[0-9]*">(.*?)<\/span>//;
        }
        while ($cont=~m/operate\(([0-9]*),([0-9]*),([0-9]*),\'([0-9a-fA-F]*)\',[0-9]*\);/)
        {
            $links{"$1"}{"link"}="http://cs".$2.".vkontakte.ru/u".$3."/audio/".$4.".mp3";
            $cont=~s/operate\([0-9]*,[0-9]*,[0-9]*,'[0-9a-f]*',[0-9]*\);//;
        }
        print Dumper(%links);
    }
}
else {
    die $response->status_line;
}

iSage ★★★★ ()
Ответ на: комментарий от iSage

Хороший скрипт, а как к ниму прикрутить проксик?)))
home.decanet.ru:8888 // можете не долбиться, там ограничение по ип )

kam ★★ ()
Ответ на: комментарий от kam

загуглил, все сам нашел, спасибо, этот скрипт то что нужно

kam ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.