1. PHP / Говнокод #26664

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    <?php
    
    function get_post_id($comment_list_id) {
        $rawdata = file_get_contents("https://govnokod.ru/comments/$comment_list_id/post");
        $rawdata='<?xml encoding="UTF-8">'.$rawdata;
    
        $old_libxml_error = libxml_use_internal_errors(true);
        $dom = new DOMDocument;
        $dom->loadHTML($rawdata);
        libxml_use_internal_errors($old_libxml_error);
    
        $xpath = new DOMXPath($dom);
        $entries = $xpath->query('//*[@id="content"]/ol[@class="posts hatom"]/li[@class="hentry"]/h2/a');
    
        foreach($entries as $entry) {
            $href = $entry->getAttribute('href');
            if(preg_match('#https://govnokod.ru/(\d+)#', $href, $matches)) {
                $post_id = $matches[1];
                break;
            }
        }
        return $post_id;
    }
    
    $outf = fopen('postids.csv', 'w');
    fputcsv($outf, array('post_id','comment_list_id'));
    for($i = 1; $i <= 26663; $i++) {
        fputcsv($outf, array(get_post_id($i), $i));
    }
    fclose($outf);

    Получение списка всех говнокодов, комментарии к которым можно восстановить.

    Запостил: ropuJIJIa, 19 Мая 2020

    Комментарии (23) RSS

    • SEO-пост.

      1. Сортируем по числовому значению первой колонки.
      2. Делаем дифф с файлом gost'а https://pastebin.com/raw/iNStdZgm
      3. Получаем список секретных чатиков.
      4. ?????
      5. PROFIT!
      Ответить
    • Нашлось что-нибудь интересное типа старых оффтопов?
      Ответить
      • Только запустил скачивание. Чтобы не напрягать сервер, качаю в один поток. Уже просканировал чуть более 50% (14 к говнокодов).
        Ответить
      • Самый первый удалённый говнокод — #1803:
        http://govnokod.ru/comments/1525/rss

        Комментарии не сохранились.
        Ответить
      • А вот #1817 удалили либо за баян, либо за нарушение авторских прав:
        http://govnokod.ru/comments/1539/rss
        Ответить
      • Нашёл несколько «false positive»: говнокод существует, но в базе gost'а он отсутствует. У всех таких говнокодов в заглавном посте картинка вместо кода. Я знал про геты (2222, 3333 и т. п.), у которых вместо кода были пони. Оказывается, бывают и другие картинки:
        http://govnokod.ru/3028
        Ответить
        • Здесь буду перечислять говнокоды с картинками.

          Мистер Хэнки:
          https://govnokod.ru/5702
          Ответить
        • Картинка с обезьянами:
          http://web.archive.org/web/20110518113023/govnokod.ru/6700

          Ссылка на вебархив, потому что сейчас картинка отвалилась.
          Ответить
        • Парсер не справлялся, потому что в кодах с картинками нет соответствующих тегах. Кое-как починил, но на фронте тэги картинок экранируются, так что видны только ссылки. Да и похуй.
          Ответить
          • Кстати, а как картинки впилены? Просто в пхпшном коде захардкожены для конкретных постов или что-то с базой?
            Ответить
            • Хардкод.
              https://github.com/wiistriker/govnokod_legacy/blob/master/modules/quoter/templates/view.tpl
              <div class="entry-content">
                  {if $quote->isSpecial()}
                  {$quote->getText()}
                  {else}
                  <ol>{foreach from=$quote->generateLines() item="line"}<li>{$line}</li>{/foreach}</ol>
                  {if $highlight == "geshi"}
                  {$quote->getText()|highlite:$langName:$quote->getCacheKey()}
                  {else}
                  <pre><code class="{$langName|h}">{$quote->getText()|h}</code></pre>
                  {/if}
                  {/if}
              </div>
              Ответить
              • показать все, что скрытоvanished
                Ответить
              • Значит, в базе специальный флажок, на который срабатывает isSpecial, в этом случае забирается сырой пых-пых-код?
                Ответить
                • Порылся ещё. Нет, там всё гораздо смешнее:
                  https://github.com/wiistriker/govnokod_legacy/blob/master/modules/quoter/models/quote.php
                  public function isSpecial()
                  {
                      $special_ids = array(
                          2222,
                          3028,
                          3333,
                          5555,
                          5702,
                          6666,
                          6700,
                          7654,
                          7777,
                          8451,
                          11225
                      );
                  
                      return in_array((int)$this->getId(), $special_ids);
                      //return $this->getId() == 2222 || $this->getId() == 3028 || $this->getId() == 3333 || $this->getId() == 5555 || $this->getId() == 5702;
                  }
                  Ответить
                  • Даже не в базе, а захардкожено в «PHP»?

                    Особенно смешна первая версия, которая закомментирована: вызов метода getId много раз.

                    Это можно публиковать отдельным кодом.
                    Ответить
                  • В коде не отмечен #1278. В нём когда-то была картинка, но я её сейчас не могу найти даже через вебархив.

                    Хотя вот же она:
                    https://web.archive.org/web/20090628232556/govnokod.ru/
                    Ответить
    • Херасебе, а почему на языке оператора шаблонизатора?
      Ответить
    • Готовая таблица:
      https://pastebin.com/raw/w7yS48p1

      Дифф:
      https://pastebin.com/raw/uBm5vYFW

      Итого 3,7 к секретных комнат.
      Ответить

    Добавить комментарий