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

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

  • Абырвалг

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    require_once &#39;code/vendors/Goutte/goutte.phar&#39;;

    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[&#39;HTTP_REFERER&#39;] = $this->history->current()->getUri();
    }
    $server[&#39;HTTP_HOST&#39;] = parse_url($uri, PHP_URL_HOST);
    $server[&#39;HTTPS&#39;] = &#39;https&#39; == 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(&#39;Location&#39;);

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

    return $response->getContent();
    }
    }


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

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

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

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

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

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

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

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

    }
    }

    parsePage($client, $initialUrl, &#39;/projectname/browser&#39;);

  • phpdude

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

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

    require_once &#39;code/vendors/Goutte/goutte.phar&#39;;

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

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


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

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

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

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

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

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

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

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

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

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

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

    это и есть обратный слеш (backslash) {+++49+++}

    я бы лучше кино посмотрел :)
    только на кинсьбург.ру!
    adw/0

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