Jump to content

Recommended Posts

Posted

В общем, делаю примерно так:

 

xml2 < /opt/zapret-info/dump.xml | grep 'url=http' | cut -d'=' -f 2 | sort | uniq > /opt/url-list.txt

 

дальше этот файлик импортируется в SCE. Импортируются почти все URL, кроме строк с русскими буквами. Некоторые люди -- дуры не знают, что на самом деле URL должен только 7-и битные символы содержать, и вставляют в реестр наркоманских сайтов, педофилии, луркморя, торрентов и т.д. запрещённых ресурсов прямо то, что в броузере набирают. Такие урлы SCE импортировать не хочет.

 

Т.е. надо русские сайты пуникодить, а русские ссылки (то, что после доменного имени) преобразовывать в проценты и 7-битные символы. Чем это можно сдлеать в выше приведённой команде ? Желательно на С и через пайп :-).

 

B.t.w. из реестра понятно, какие гос.организации чем увлекаются ;-)

Posted

Я вижу это как конструкцию на awk.

Принимаем список, строки с русскими символами пропускаем через idn.

 

Я где-то находил енкодер в сети, которому даёшь ссылу, а он в ответ выдаёт кодированную ссылку, у которой домен пуникодед (если он интернациональными символами был, иначе домен не трогается), а всё, что после домена, кодируется процентами и 7-битными символами (опять же, если это требуется). Сейчас найти этот енкодер не могу, но там всёравно не указано, как это реализовано.

 

В общем, хотелось бы такое же поведение получить.

 

А что, никто этим вопросом ранее не озадачивался ? Хотя конечно можно подойти формально к этому вопросу, если надзорные органы начнут докапываться за нефильтрацию русских URL. Показать им дамп трафика и там не будет именно той ссылки, что в списке. Броузеры-то всё кодируют сами.

 

В идеале эту проблему должны решать составители реестра. Понапихали туда всякой чуши, а мы тут велосипеды на awk и idn придумываем.

Posted

Понапихали туда всякой чуши, а мы тут велосипеды на awk и idn придумываем

 

Велосипед из нескольких строчек на питоне

#!/usr/bin/env python

import unicodedata
import urlparse
from urllib import quote
import sys
for url in sys.stdin:
   scheme, host, path, query, fragment = urlparse.urlsplit(url.strip())
   scheme = scheme.lower()
   fragment = ""
   host = host.lower()
   host = host.decode('utf-8').encode('idna')
   path = quote(path, "~:/?#[]@!$&'()*+,;=")
   query = "&".join(["=".join([quote(t, "~:/?#[]@!$'()*+,;=") for t in q.split("=", 1)]) for q in query.split("&")])
   print urlparse.urlunsplit((scheme, host, path, query, fragment))

 

Запускать

urlfix < before > after

Posted

Понапихали туда всякой чуши, а мы тут велосипеды на awk и idn придумываем

 

Велосипед из нескольких строчек на питоне

#!/usr/bin/env python

import unicodedata
import urlparse
from urllib import quote
import sys
for url in sys.stdin:
   scheme, host, path, query, fragment = urlparse.urlsplit(url.strip())
   scheme = scheme.lower()
   fragment = ""
   host = host.lower()
   host = host.decode('utf-8').encode('idna')
   path = quote(path, "~:/?#[]@!$&'()*+,;=")
   query = "&".join(["=".join([quote(t, "~:/?#[]@!$'()*+,;=") for t in q.split("=", 1)]) for q in query.split("&")])
   print urlparse.urlunsplit((scheme, host, path, query, fragment))

 

Запускать

urlfix < before > after

 

Спасибо за код. Попробовал, работает быстро, но проблема осталась :-). Я уже не знаю, в чём дело и что надо этой SCE. При загрузке кодированных скриптом url выдаёт такие ошибки:

 

Error - Internal error, Input concatenated Key String are not valid: lurklurk.com:/Lurkmore:%25D0%25A6%25D0%25B5%25D0%25BD%25D0%25B7%25D1%2583%25D1%2580%25D0%25B0/%25D0%25A2%25D0%25B0%25D0%25B1%25D0%25BB%25D0%25B8%25D1%2586%25D0%25B0:*:*
Error - Internal error, Input concatenated Key String are not valid: lurkmore.co:/%25D0%25A4%25D0%25B0%25D0%25B9%25D0%25BB:Cowboy_shota.jpg:*:*
Error - Internal error, Input concatenated Key String are not valid: lurkmore.co:/%25D0%25A4%25D0%25B0%25D0%25B9%25D0%25BB:Shota_and_loli2.jpg:*:*
Error - Internal error, Input concatenated Key String are not valid: lurkmore.co:/Lurkmore:%25D0%25A6%25D0%25B5%25D0%25BD%25D0%25B7%25D1%2583%25D1%2580%25D0%25B0/%25D0%25A2%25D0%25B0%25D0%25B1%25D0%25BB%25D0%25B8%25D1%2586%25D0%25B0:*:*
Error - Internal error, Input concatenated Key String are not valid: lurkmo.re:/%25D0%25A4%25D0%25B0%25D0%25B9%25D0%25BB:6adeb2114c98d549a03b28e0166d8fc8.jpg:*:*
Error - Internal error, Input concatenated Key String are not valid: lurkmo.re:/%25D0%25A4%25D0%25B0%25D0%25B9%25D0%25BB:Shota_and_loli2.jpg:*:*
Error - Internal error, Input concatenated Key String are not valid: lurkmo.re:/Lurkmore:%25D0%25A6%25D0%25B5%25D0%25BD%25D0%25B7%25D1%2583%25D1%2580%25D0%25B0/%25D0%25A2%25D0%25B0%25D0%25B1%25D0%25BB%25D0%25B8%25D1%2586%25D0%25B0:*:*
Error - Internal error, Input concatenated Key String are not valid: lurkmore.net:/Lurkmore:%25D0%25A6%25D0%25B5%25D0%25BD%25D0%25B7%25D1%2583%25D1%2580%25D0%25B0/%25D0%25A2%25D0%25B0%25D0%25B1%25D0%25BB%25D0%25B8%25D1%2586%25D0%25B0:*:*
Error - Internal error, Input concatenated Key String are not valid: lurkmore.to:/%25D0%259A%25D0%25BE%25D0%25BF%25D0%25B8%25D0%25BF%25D0%25B0%25D1%2581%25D1%2582%25D0%25B0:%25D0%259F%25D0%25B5%25D0%25B4%25D0%25BE%25D1%2584%25D0%25B8%25D0%25BB%25D0%25B8%25D1%258F:*:*
Error - Internal error, Input concatenated Key String are not valid: lurkmore.to:/%25D0%259E%25D0%25B1%25D1%2581%25D1%2583%25D0%25B6%25D0%25B4%25D0%25B5%25D0%25BD%25D0%25B8%25D0%25B5:%25D0%2593%25D1%2580%25D0%25B8%25D0%25B1%25D1%258B:*:*
Error - Internal error, Input concatenated Key String are not valid: lurkmore.to:/%25D0%259E%25D0%25B1%25D1%2581%25D1%2583%25D0%25B6%25D0%25B4%25D0%25B5%25D0%25BD%25D0%25B8%25D0%25B5:%25D0%259A%25D0%25BE%25D0%25BD%25D0%25BE%25D0%25BF%25D0%25BB%25D1%258F:*:*
Error - Internal error, Input concatenated Key String are not valid: lurkmore.to:/%25D0%25A4%25D0%25B0%25D0%25B9%25D0%25BB:6adeb2114c98d549a03b28e0166d8fc8.jpg:*:*
Error - Internal error, Input concatenated Key String are not valid: lurkmore.to:/%25D0%25A4%25D0%25B0%25D0%25B9%25D0%25BB:E999c6a0c8f9caaeba0a2b76d4455748384e5374_loli.jpg:*:*
Error - Internal error, Input concatenated Key String are not valid: lurkmore.to:/%25D0%25A4%25D0%25B0%25D0%25B9%25D0%25BB:Moe_77869_sample.jpg:*:*
Error - Internal error, Input concatenated Key String are not valid: lurkmore.to:/%25D0%25A4%25D0%25B0%25D0%25B9%25D0%25BB:Shota_and_loli2.jpg:*:*

 

Почему-то только про луркморе :-). Ну ещё там была ошибка, что длинее чем 900 символов. Например, в реестре есть урл "http://lurkmore.co/%D0%A4%D0%B0%D0%B9%D0%BB:Shota_and_loli2.jpg" прям в таком виде и он почему-то в SCE не лезет. Т.е. этот урл вроде бы и перекодирован правильно, но в чём дело пока не ясно.

 

Вроде бы без ошибок всосался перекодированный url "http://терч.рф/products/kuritelnaya-smes-ak-47#comment_842", это один из тех, которые открывались. Но он всёравно продолжает открываться. Другие обычные url из списка блокируются.

 

Ребусы какие-то.

 

Может быть что-то вообще не так делаю ? Как эти русские сайты блокировать-то ? :-).

Posted

Как эти русские сайты блокировать-то ? :-) - русским же dpi :)))

 

SCE не русский, SCE еврейский dpi :-), мы в пролёте с русскими буквами ? Да по-любому надо разобраться как кодировать УРЛ и всё, что-то не так в моих рассуждениях :-).

Posted

Как эти русские сайты блокировать-то ? :-) - русским же dpi :)))

 

SCE не русский, SCE еврейский dpi :-), мы в пролёте с русскими буквами ? Да по-любому надо разобраться как кодировать УРЛ и всё, что-то не так в моих рассуждениях :-).

У меня карбон, у друзей скат - оно как-то само эти задачи решает :) оффтоп конечно

Posted

Понапихали туда всякой чуши, а мы тут велосипеды на awk и idn придумываем

 

 

Велосипед из нескольких строчек на питоне

 

#!/usr/bin/env pythonimport unicodedataimport urlparsefrom urllib import quoteimport sysfor url in sys.stdin:   scheme, host, path, query, fragment = urlparse.urlsplit(url.strip())   scheme = scheme.lower()   fragment = ""   host = host.lower()   host = host.decode('utf-8').encode('idna')   path = quote(path, "~:/?#[]@!$&'()*+,;=")   query = "&".join(["=".join(
@!$'()*+,;=") for t in q.split("=", 1)]) for q in query.split("&")]) print urlparse.urlunsplit((scheme, host, path, query, fragment))

 

 

Запускать

urlfix < before > after

 

 

Загрузка в SCE не проходит для тех URL, в которых есть ":" . Не подскажете, как модернизировать ваш код, чтобы он заменял двоеточие на "\:" ? SCE ":" считает своим разделителем. Т.е. надо экранировать двоеточия, если они есть в составе пути после доменного имени.

Posted

Последняя строчка

print urlparse.urlunsplit((scheme, host, path.replace(":","\:"), query.replace(":","\:"), fragment))

 

Большое спасибо. После праздников продолжу тестирование -- сейчас опасно SCE трогать :-)

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...
На сайте используются файлы cookie и сервисы аналитики для корректной работы форума и улучшения качества обслуживания. Продолжая использовать сайт, вы соглашаетесь с использованием файлов cookie и с Политикой конфиденциальности.