Показать сообщение отдельно
Старый 23.08.2018, 15:10   #53
JakoKruzo
SEO programming
 
Аватар для JakoKruzo
 
Регистрация: 04.06.2008
Сообщений: 617
Репутация: 58907

ТопикСтартер Re: MassArticleParser - массовый парсинг статей. Один парсер для всех сайтов.

Один человек предлагал, чтобы я встроил в парсер перевод текстов на нужный язык. Я отказался потому, что считаю это неуместным функционалом для парсера. Но перевод статей всё же можно сделать через скрипт. Вот пример функции перевода через API Яндекс.Переводчика:

В конец thread_events.txt добавить:
function Translate(text,langs,ukey){
r='';
p='text='+escapedata(text);
url="/api/v1.5/tr.json/translate?lang="+langs+"&key="+ukey+"&format=html";
h="POST "+url+" HTTP/1.1\r\nHost: translate.yandex.net\r\n";
h=h+"Content-Type: application/x-www-form-urlencoded\r\n";
h=h+"Content-Length: "+strlen(p)+"\r\n\r\n";
h=h+p;

nt=0;
do{
r=WebRequest('https://translate.yandex.net'+url,h,'','utf-8');
nt=nt+1;
}while(strpos(r,'HTTP/1.1 200 OK')==0 && nt<2);

if(strpos(r,'"code":200')>0){
i=strpos(r,'"text":["');
if(i>0){
i2=strpos(r,'"]',i);
r=substr(r,i+9,i2-(i+9));
r=str_replace('\n',"\n",r);
r=str_replace('\r',"\r",r);
r=str_replace('\t',"\t",r);
r=str_replace('\"','"',r);
}else{r='';}
}else{r='';}
return(r);
}

function escapedata(text){
r='';
s=15000;
l=strlen(text);
for(i=1;i<=l;i=i+s){
r=r+escapeuri(substr(text,i,s));
}
return(r);
}


А после строки function on_Save(){ вставить:
$output=Translate($output,'ru-en','ваш-api-ключ');

ru-en - направление перевода (с русского на английский).
API-ключ выдается Яндексом бесплатно.
Максимальный размер передаваемого для перевода текста составляет 10 000 символов.
Тексты в тегах (например, в alt) почему-то Яндекс.Переводчиком через API не переводятся, хотя если вручную на https://translate.yandex.ru пробовать, то переводятся.
Ещё обратите внимание, что перевод приходит в экранированном виде. В скрипте есть разэкранирование, но не всех символов:
r=str_replace('\n',"\n",r);
r=str_replace('\r',"\r",r);
r=str_replace('\t',"\t",r);
r=str_replace('\"','"',r);


И, кто не знает, в Яндекс.Переводчике есть лимиты: до 1 000 000 символов в сутки, но не более 10 000 000 символов месяц. Стоимость использования платного API - https://translate.yandex.ru/developers/prices

Какой сервис-переводчик выбрать - решайте сами. Я просто продемонстрировал, как отправлять http-запросы через функцию
WebRequest.
__________________
jakodorgen.ru
JakoKruzo вне форума   Ответить с цитированием
Сказали спасибо: