Проект. Нужны советы

Тема в разделе "Как сделать...", создана пользователем Innocent77, 1 сен 2013.

  1. Innocent77

    Innocent77 Создатель

    Регистр.:
    20 дек 2009
    Сообщения:
    23
    Симпатии:
    6
    Пишу простенький дорген на основе парсинга выдачи. Есть админ часть, которую уже написал. Админка простая, в качестве хранения парметров использую .ini файл. Не скажу, что очень удобно, потому как сложно пересохранять отдельные данные в .ini. Поэтому приходится снова считывать .ini и переписывать файл с новыми данными полученными из формы. Есть более простой и рациональный способ?
    Архитектура Админ части

    -admin
    --index.html(Форма авторизации в админку, после удачного входа header location отправляет в /main/)
    --check.php(Проверка данных отправляемых с index.html, в этом файле инклудится класс проверки логина, пароля, и функция очистки данных от тегов и т.п.)
    --main
    ---index.php(две формы)
    ---main_forms.php(здесь функция обработка, исходя из какой формы пришли данные провожу с ними деяствия, далее header location обратно в /main/)
    --proxy
    ---index.php(принцип такой же как и на main)
    ---proxy_forms.php
    --theme(стили админки и т.п.)
    Оно работает, но как то это все примитивно и не по короткому пути.
    Подскажите как более умно обрабатывать данные формы и запись .ini? Общий класс? Если класс написать, то использовать static? Бд использовать не хочу.

    Сама генерация
    Был написан класс с использованием мульти курл с прокси/без, скармливаешь ему массив ссылок - на выходе получаешь страницы. И было это не очень удобно. Потому как, чтобы спарсить несколько пс, нужно было делать след манипуляции:
    PHP:
    # Формируем массивы ссылок в цикле исходя из keys
        
    $bing[] = 'http://www.bing.com/'.urlencode($keys[$marker]);
                    
    $ya[]="dsfdsf";
                    
    $go[] = "dsfsdf";
    # Потом я создавал объект класса
    $_bing $Amc->Request($bing);
    foreach(
    $_bing as $b){
        
    $snipBing[] = snippetBing($b['content']);
    }

    $_ya $Amc->Request($km);
    foreach(
    $_km as $k){
        
    $snipya[] = snippetya($k['content']);
    }

    $_go $Amc->Request($go);
    foreach(
    $_go as $ud){
        
    $snipgo[] = snippetgo($ud['content']);
    }
    где snippetBing и подобное это функции парсинга сниппета. Дальше по меткам из шаблона заменял в цикле данные.
    Сейчас хочу реализовать парсинг картинок, видео. Как лучше сделать? Мб удобнее будет формировать многомерный массив? И в цикле подставлять в мулти курл одномерный?

    Как лучше всего реализовать рандомный выбор парсинга пс? Чтобы при нахождении в шаблоне нескольких меток {snippet} парсился сниппет с разных пс?

    Проясните пожалуйста эти моменты. Логику что куда, необходимые данные и т.п..
    Спасибо.
     
  2. CAPAXA

    CAPAXA

    Регистр.:
    7 июн 2007
    Сообщения:
    920
    Симпатии:
    547
    Аналогичную пишу систему на https://github.com/bcosca/fatfree
    БД используется sqlite. Сначала начал с админки, и понял что правильнее начать с фронта. Система получается довольно интересной. Скорость генерации страницы (без парсинга, уже готовый контент) на моем ноуте около 0,08 сек. При этом кеширование не используется, в БД одних только сниппетов 200.000, постов 10.000, категорий 1.000. Есть встроенный в фреймворк шаблонизатор, ну очень удобный, простой и очень гибкий.
     
  3. Innocent77

    Innocent77 Создатель

    Регистр.:
    20 дек 2009
    Сообщения:
    23
    Симпатии:
    6
    Никогда не имел дела с фреймфорками. Посмотрел на гитхабе, есть несколько интересных фишек, русской документации нет? или примеров использования? Шаблонизатор - да удобный. Смущает латиница. Спасибо за ответ. На счет парсинга, рандомного выбора пс не подскажешь?
     
  4. CAPAXA

    CAPAXA

    Регистр.:
    7 июн 2007
    Сообщения:
    920
    Симпатии:
    547
    Вот сайт с документацией http://fatfreeframework.com/
    Рандомный на одной странице лучше не реализовывать, поскольку будет повышенная нагрузка + длительное время парсинга.
    Вообще я планирую сделать асинхронный парсинг, без крона. А там можно уже в один и тот-же контент допарсивать сниппеты из рандомной ПС.
     
  5. Innocent77

    Innocent77 Создатель

    Регистр.:
    20 дек 2009
    Сообщения:
    23
    Симпатии:
    6
    Посмотрел посты на хабре. Пока практического применения не вижу, если только использовать в админке. Но смысл использовать в админке если там всего 4 index.php и 4 обработчика.
    Асинхронный парсинг - хм, любопытно. Только не понял в смысле без крона? Поставил задание он сделал кучу пустых страниц, и через определенный период обработчик обходит их и докидывает контент? Или у тебя все данные хранятся в бд? Сделал дор на 10к страниц, на шареде еще 30 таких же, и все умер хостинг.
    Я за статику. Т.е. нужно прямолинейно - сразу спарсил - создал - очистил память - сразу спарсил и т.д. Только вот как бы реализовать просто, быстро и расширяемо.
    Silex не пробовал? похож на f3.
     
  6. CAPAXA

    CAPAXA

    Регистр.:
    7 июн 2007
    Сообщения:
    920
    Симпатии:
    547
    Мне изначально f3 понравился из-за его роутинга и нативной поддержки sqlite. Да у меня все данные хранятся в БД. При указанных мной параметрах БД весит около 0,5 ГБ. Забыл сказать, что система мультидоменная и имеет отложенную публикацию.
    Идея асинхронного парсинга состоит в том что-бы парсинг был автоматическим и начинался только если на сайт зашел бот и пользователь. Но происходил бы сам парсинг в фоновом режиме. Из плюсов: нет надобности настраивать для каждого домена крон + можно на уровне ядра отслеживать одновременный парсинг несколькими доменами одной и той же ПС (т.е. избегать бана IP, + балансировка нагрузки на сервер, т.е. отсутствие кучи одновременных запросов на парсинг).
     
  7. Innocent77

    Innocent77 Создатель

    Регистр.:
    20 дек 2009
    Сообщения:
    23
    Симпатии:
    6
    Как отложенную публикацию реализовал?
     
  8. CAPAXA

    CAPAXA

    Регистр.:
    7 июн 2007
    Сообщения:
    920
    Симпатии:
    547
    В БД добавил поле date, и выборку делаю по сегодняшнюю дату.
     
  9. Innocent77

    Innocent77 Создатель

    Регистр.:
    20 дек 2009
    Сообщения:
    23
    Симпатии:
    6
    В принципе неплохая реализация с бд. Со всеми вытекающими плюсами. + Шаблонизация. Вот только сильная нагрузка будет, если по 5к-6к страниц фигарить на дор? Ты одну единую базу используешь? Или один дор - одна база.
     
  10. CAPAXA

    CAPAXA

    Регистр.:
    7 июн 2007
    Сообщения:
    920
    Симпатии:
    547
    Один дор - одна база. + Отдельная база под парсинг с последующей синхронизацией с основной 1 раз в сутки (в sqlite быстрое чтение, но медленная запись).
    А выборка там очень быстрая, особенно если индексы правильно проставить.