1. JavaScript / Говнокод #24200

    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
    31. 31
    32. 32
    33. 33
    34. 34
    /**
     * Peetushna
     * Node.js 10
     * node index.js > report.csv
     */
    
    const { get } = require("axios");
    const { load } = require("cheerio");
    
    Promise.resolve().then(async () => {
      const responses = reqGen(1, 25000);
      const peetushna = /питушня/g;
      for await (const resp of responses) {
        if (resp.status != 200) break;
        const wordCount = resp.data.match(peetushna);
        const count = wordCount ? wordCount.length : 0;
        const html = load(resp.data);
        const lang = html('a[rel="chapter"]')
          .text()
          .replace("Си", "C");
        console.log(`"${lang}", ${count}`);
      }
    });
    
    async function* reqGen(first, max) {
      while (first <= max) {
        try {
          const resp = await get("http://govnokod.ru/" + first++);
          yield resp;
        } catch (e) {
          //
        }
      }
    }

    Запостил: mazhuravlev, 27 Апреля 2018

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

    • } catch (e) {
            //
          }
      Ответить
      • Кстати, в эту сторону уже подумали: http://2ality.com/2017/08/optional-catch-binding.html

        Вообще, для блоков try-catch в языках должны быть сразу предусмотрены варианты:
        1. try {} catch (e) {}
        2. try {} catch {}
        3. try {} catch;
        4. exec {} // exec { xxx } аналогично try { xxx } catch (e) {}
        Ответить
        • В nodejs 10 такой try {} catch {} уже есть, я про него забыл и на автомате (е)
          Ответить
        • Так можно в руби, правда это не работает с некоторыми видами Exceptionов
          def will_raise                            
                  raise StandardError, "Fuck yeah"   
          end                                       
                                                    
          will_raise rescue nil   # поймать и сделать ничего: выражение вычислится в nil
                                                    
          p "Exception skippeed"
          Ответить
      • Там проблема глубже, дурацкий axios бросает исключение, если статус не 200, а 404 например. Это совсем неправильно, но так много где сделано. Запрос выполнен успешно с кодом 404, какого хрена он сровит?
        Ответить
    • Сразу видно хайлоадщика — зачем кешировать данные локально, если можно мап-редьюснуть всю базу? Сервак всё стерпит.
      Ответить

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