ФорумПрограммированиеPHP для идиотов → Сграббить репозиторий из трака

Сграббить репозиторий из трака

  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 12 июля 2010 г. 18:48

    В общем у меня есть доступ к траку, там гит, в нем репо. К самому гиту доступа нет.

    Как бы спиздить содержимое репозитория?
    Мой план:
    1) пишу граббер (дудкурл? + phpQuery)
    2) пизжу последнюю ревизию
    3) создаю свой локальный репо
    4) пишу другой граббер
    5) раз в сутки-двое им смотрю таймлайн, делаю патчи, обновляю локальный репо

    Дуд, твой курл умеет делать стандартный auth (.htpasswd)?
    Спустя 22 сек.
    парсить лучше через прокси наверно?
    Спустя 36 сек.
    зачем мне это нужно - я еще не решил
  • Faster

    Сообщения: 1159 Репутация: N Группа: Кто попало

    Spritz 12 июля 2010 г. 18:53, спустя 4 минуты 46 секунд

    >Дуд, твой курл умеет делать стандартный auth (.htpasswd)?
    отвечу за дуда - умеет :)
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 12 июля 2010 г. 18:58, спустя 5 минут 24 секунды

    и https с сертефикатом, который требует "подтверждения исключения"?
    Спустя 169 сек.
    может в траке есть какой-то способ проще все сорцы выкачать?
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 12 июля 2010 г. 23:42, спустя 4 часа 44 минуты 2 секунды

    и https с сертефикатом, который требует "подтверждения исключения"?
    Спустя 2 минуты 49 секунд добавил
    может в траке есть какой-то способ проще все сорцы выкачать?

    еще раз повторюсь, дудкурл - обертка для обычного курла, что умеет курл, умеет и дудкурл. с сертификатами тоже умеет, я наспор делал выписку счета и прием оплаченых счетов для light.webmoney.ru, а там даже с паролем олол!!! )))
    Спустя 30 сек.
    Абырвалг, там же есть repository browser .. .ты его парсишь то?
    Сапожник без сапог
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 13 июля 2010 г. 0:39, спустя 56 минут 18 секунд

    да, его паршу.

    Сейчас пробую использовать http://github.com/fabpot/Goutte, даже специально 5.3 поставил. Дуд, мне неймспейсы тоже не нравятся ((. Неудобно пиздец. Столько кода лишнего.

    Goutte слабенькый. Даже не умеет принимать plain-text, обязательно блять конвертирует его в DomCrawler. Хотя может это проблема какого-то другого класса.
    Думаю, что на половине селекторов он будет дохнуть. Ну посмотрим.
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 13 июля 2010 г. 0:45, спустя 6 минут 2 секунды

    Fetched 47.5MB in 11s (4,066kB/s)
    наконец то скорость на сервер вернули нормальную))
    Спустя 17 сек.
    в 1 поток, а то была пиздец скорость как на 2мбитном канале … :)))
    Сапожник без сапог
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 13 июля 2010 г. 0:53, спустя 7 минут 49 секунд

    я думаю: может парсить на ихнем соседнем сервере (они доступ по SSH не закрыли еще)? а потом результаты стянуть…

    Хотя не, это:
    1) наглость
    2) палево
    Спустя 20 сек.
    3) невозможно, у них там на соседнем серве 5.2
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 13 июля 2010 г. 0:56, спустя 3 минуты 8 секунд

    а зачем ты вообще решил содрать то исходники?
    Сапожник без сапог
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 13 июля 2010 г. 1:00, спустя 4 минуты 36 секунд

    Сам не знаю. Для ознакомления)

    Мне за это может что-то быть?
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 13 июля 2010 г. 1:04, спустя 4 минуты 13 секунд

    я бы лучше кино посмотрел :)
    Сапожник без сапог
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 13 июля 2010 г. 1:32, спустя 27 минут 57 секунд

    хм. Тут такое дело… У меня есть доступ на SVN
    Спустя 167 сек.
    <?php

    require_once 'code/vendors/Goutte/goutte.phar';

    class Client extends Goutte\Client
    {
    public function requestPlain($method, $uri, array $parameters = array(), array $headers = array(), array $files = array(), array $server = array(), $changeHistory = true)
    {
    /**
    * Calls a URI.
    *
    * @param string  $method        The request method
    * @param string  $uri           The URI to fetch
    * @param array   $parameters    The Request parameters
    * @param array   $headers       The headers
    * @param array   $files         The files
    * @param array   $server        The server parameters
    * @param Boolean $changeHistory Whether to update the history or not (only used internally for back(), forward(), and reload())
    *
    * @return Symfony\Components\DomCrawler\Crawler
    */
    $uri = $this->getAbsoluteUri($uri);

    $server = array_merge($this->server, $server);
    if (!$this->history->isEmpty()) {
    $server['HTTP_REFERER'] = $this->history->current()->getUri();
    }
    $server['HTTP_HOST'] = parse_url($uri, PHP_URL_HOST);
    $server['HTTPS'] = 'https' == parse_url($uri, PHP_URL_SCHEME);

    $request = new Symfony\Components\BrowserKit\Request($uri, $method, $parameters, $files, $this->cookieJar->getValues($uri), $server);

    $this->request = $this->filterRequest($request);

    if (true === $changeHistory) {
    $this->history->add($request);
    }

    if ($this->insulated) {
    $this->response = $this->doRequestInProcess($this->request);
    } else {
    $this->response = $this->doRequest($this->request);
    }

    $response = $this->filterResponse($this->response);

    $this->cookieJar->updateFromResponse($response, $uri);

    $this->redirect = $response->getHeader('Location');

    if ($this->followRedirects && $this->redirect) {
    return $this->crawler = $this->followRedirect();
    }

    return $response->getContent();
    }
    }


    $cookieJar = new Symfony\Components\BrowserKit\CookieJar();

    $cookieJar->set(Symfony\Components\BrowserKit\Cookie::fromString('__unam=***'));
    $cookieJar->set(Symfony\Components\BrowserKit\Cookie::fromString('trac_auth=***'));
    $cookieJar->set(Symfony\Components\BrowserKit\Cookie::fromString('trac_form_token=***'));
    $cookieJar->set(Symfony\Components\BrowserKit\Cookie::fromString('trac_session=***'));

    $client = new Client(array(), array(), null, $cookieJar);

    $initialUrl = 'https://trac.***.***.***';
    define('OUTPUT_DIR', './output');

    function parsePage(Client $client, $url, $path = '')
    {
    $crawler = $client->request('GET', $url . $path);
    $items = $crawler->filter('#dirlist tbody tr td.name a');

    foreach ($items as $item) { // $item = DOMElement а не $crawler!!!
    $href = $item->getAttribute('href');

    if ('dir' == $item->getAttribute('class')) {
    $func = __FUNCTION__;
    $func($client, $url, $href);

    } else {
    $crawlerNew = $client->request('GET', $url . $href);
    $href = $crawlerNew->filter('#altlinks')->filter('li.last a')->attr('href');
    $content = $client->requestPlain('GET', $url . $href);
    //TODO: сохранить $content в файл
    }

    }
    }

    parsePage($client, $initialUrl, '/projectname/browser');

  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 13 июля 2010 г. 1:36, спустя 3 минуты 42 секунды

    require_once 'code/vendors/Goutte/goutte.phar';

    class Client extends Goutte\Client
    $cookieJar = new Symfony\Components\BrowserKit\CookieJar();

    $cookieJar->set(Symfony\Components\BrowserKit\Cookie::fromString('__unam=***'));


    епта бля, еще пара "приколов" пхп и от пхп кода реально будет бросать в дрожь

    а хули они взяли виндовую палку то? чо не обратный слеш ))))))))))))))))))))) блядь ну не понимаю я их блядь ну непонимаю!!!!
    Сапожник без сапог
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 13 июля 2010 г. 1:41, спустя 5 минут 19 секунд

    блин, с этим репозиторием я реально на emany похож. Он тоже выдирал откуда-то js-файлы.
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 13 июля 2010 г. 1:45, спустя 3 минуты 25 секунд

    Абырвалг, больше на обезьяну и сотовый телефон :D
    Сапожник без сапог
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 14 июля 2010 г. 0:58, спустя 23 часа 13 минут 20 секунд

    а хули они взяли виндовую палку то? чо не обратный слеш ))))))))))))))))))))) блядь ну не понимаю я их блядь ну непонимаю!!!!

    это и есть обратный слеш (backslash)
    Спустя 49 сек.

    я бы лучше кино посмотрел :)
    только на кинсьбург.ру!
    https://smappi.org/ - платформа по созданию API на все случаи жизни

Пожалуйста, авторизуйтесь, чтобы написать комментарий!