Advertisement
Guest User

Untitled

a guest
Jul 16th, 2018
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.45 KB | None | 0 0
  1.  
  2.  
  3. Все блоки для отрисовки рекламы лежат тут:
  4. http://kagda.ru/i/ed01318ed390_16-07-2018-11:01:34_ed01.png
  5.  
  6.  
  7. Сделать уровень абстракции - класс, будем вызывать всегда его при отрисовке, передавая в него
  8. путь в twig шаблону.
  9.  
  10. Ответственность класса проверить разрешена ли реклама для отрисовки на этой странице.
  11. Если класс выясняет, что нельзя, то выводится пустота. Если можно, то отрисовывается шаблон.
  12.  
  13.  
  14.  
  15. Задача - разобраться как этот класс вкрутить в twig (если никак, то протащить из контроллера).
  16. Хранение ссылок - если бы не было regex, то можно было бы хранить хеш ссылку. И по хешу сделать поиск.
  17.  
  18. Есть * в конце, которая может расшириться очень далеко. Т.е. расширять вручную и перебирать все варинты дело гиблое.
  19.  
  20. Надо хранить оригинальные ссылки.
  21.  
  22.  
  23. Хранится будет как - { 'someLink' : '1|0' }
  24. сама ссылка isExpandable(действует ли ссылка как префикс)
  25.  
  26. На этапе разбора файла срезаем * в конце, и если была * ,то помечаем как достаточно совпадения префикса , чтобы заблокировать.
  27. И флаг isExpandable = 1.
  28.  
  29.  
  30.  
  31. Пример:
  32. На входе ссылка:
  33. https://omsk.barahla.net/kuplyu-prodam/zapchasti-aksessuary/25429228_prodam-avtozapchasti-b-u-shevrole-podveska-na-deu-shevrole-rychag-stoyka-balka.html
  34.  
  35.  
  36. Делаем поиск по точному совпаднию ссылки ( new AdsShowManager($link))->getIsBlockedBySingleLink()
  37. класс ищет такой ключ в redis - если нет. возвращает true|false.
  38.  
  39.  
  40. Нужно сделать проверку по префиксам. Получаем из redis все префиксы у которых стоит isExpandable = 1
  41.  
  42. И в цикле инспектируем ссылку текущую. Объект будет представлять такой метод
  43. ( new AdsShowManager($link))->getIsBlockedByPrefix()
  44.  
  45.  
  46.  
  47.  
  48. Итого. getIsBlockedBySingleLink, getIsBlockedByPrefix - можно приватными сделать.
  49. getIsBlocked() - сделать публичным и его дергать. Сам getIsBlocked уже дергает методы проверки
  50. по точному совпадению и по prefix.
  51. Можно добавить ещё метод, который будет логировать все заблокированные ссылки по результатам работы программы
  52. (вероятно было бы полезно для отладки).
  53.  
  54. Это если делать динамически.
  55.  
  56.  
  57. ~~~~~~~~~~~~~~~~~~~~~~~~~
  58.  
  59.  
  60. А можно проанализировав ссылки, поставить в БД монго атрибут hideAds в 1 и не делать анализ в рантайме.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement