14 апреля 2008 ~ 10 Комментариев

Приятные мелочи на php

php

PHP-logo-140_74px

Пишу эту заметку для себя, вдруг мне пригодиться, в моем компьютере потеряется, а тут на блоге останется навсегда — да и Вам может пригодиться ;-).

Две маленькие функции на php:

  • Определение Тематического Индекса Цитирования
  • Многоязычный переводчик

Определение ТИЦ

Берет значения тИЦ напрямую из Яндекс.Каталога, очень быстрая скорость работы. Писал не Я, писал Владимир.

<?php
function yandex_tic($url){
$file=file_get_contents("http://search.yaca.yandex.ru/yca/cy/ch/$url/");
if(preg_match("!—\s+([0-9]{0,8})<\/b>!is",$file,$ok)){
// сайт не в каталоге.
$str=$ok[1];
        }
        else if(preg_match("!<td class=\"current\" valign=\"middle\">(.*?)</td>\n</tr>!si", $file, $ok)){
                if(preg_match("!<td align=\"right\">(.*?)</td>\n</tr>!si", $ok[0], $str)){
// сайт в каталоге.
$str=$str[1];
                } else {
$str=0;
                }
        }
        else {
$str=0;
        }
return trim($str);
}
// Пример:
// echo yandex_tic("zhilinsky.ru")
?>

Многоязычный переводчик

Работает через Google Переводчик.

Работает быстро. Писал Я, на коленке, поэтому криво, если будут замечания — пишите! Я исправлюсь ;-)

<?php
function translate($text,$lg) {
$lg = urlencode($lg);
$text = urlencode($text);
$link = file_get_contents("http://google.com/translate_t?langpair=$lg&text=$text");
preg_match('/<div id=result_box dir=\"ltr\">(.*?)<\/div>/', $link, $out);
return $out[1];
} 

// Пример:
// echo translate("hello")

// Пример c другим языком(С Английского на Немецкий):
// echo translate("hello", "en|de")
?>

10 Комментариев для “Приятные мелочи на php”

  1. EwGenij 15 апреля 2008 at 0:03 Permalink

    Вполне неплохо, но пригодится только для маленьких заданий. Иначе забанят негодяи :) Попомучался я пару дней с переводом городов мира при помощи этого транслятора. Даже прокси не каждые помогали. Еще и сейчас товарищ мучается, продолжает. И как оказалось, для транслятора недавно открыли доступный API :)

    А про тиц еще вот хорошая заметка.
    http://kurilka.co.ua/archives/alternative-variants-receipt-cy – на основе распознавания текста с картинки. Хотя, уверен, Вы с ней (заметкой) знакомы :)

  2. Александр 15 апреля 2008 at 0:39 Permalink

    Днями просиживаю штаны в интернете, а про переводчик от гугля первый раз слышу… чудеса :-O

  3. Zeldar 15 апреля 2008 at 2:00 Permalink

    Они только недавно открыли свое API по переводчику.
    А как сервис гугля переводчик живет уже оооочень давно

  4. AztEK 15 апреля 2008 at 17:22 Permalink

    file_get_contents(»http://…»):

    Это ужас, никогда так не пишите! ТОЛЬКО с помощью сокетов или cURL.

  5. Я собственной персоной 15 апреля 2008 at 18:38 Permalink

    file_get_contents(»http://…»):

    Это ужас, никогда так не пишите! ТОЛЬКО с помощью сокетов или cURL.

    Ну гореть мне в пхп аду :-). А чем плох этот метод? Работает ведь!

  6. Strike 16 июля 2008 at 4:20 Permalink

    file_get_contents(»http://…»):

    Это ужас, никогда так не пишите! ТОЛЬКО с помощью сокетов или cURL.

    Ну гореть мне в пхп аду :-). А чем плох этот метод? Работает ведь!

    Этот метод работает но не везде и не во всех ситуациях. И вот несколько причин подтверждающих это:
    1. file_get_contents работает только с удаленными хостами толдько при включенной директиве allow_url_fopen в php.ini (установить эту директиву в .htaccess или скрипте нельзя). Как правило хостеры ее отключают. По крайней мере умные.
    2. file_get_contents не имеет параметра тайм-аута, что самое важное,т.к. в случае если сайт не отвечает или тяжело отвечает, скрипт может легко «подвиснуть».
    3. Если где-то используется file_get_contents и случайно пропущена обработка возможности ошибочного входного параметра, то может быть XSS или переполнения буфера.
    4. Нет возможности указать порт, по которому необходимо соединиться с сервером.

  7. aleksej 2 августа 2008 at 0:43 Permalink

    $ctx = stream_context_create(array(
    ‘http’ => array(
    ‘timeout’ => 60
    )
    )
    );
    $img = @file_get_contents(’http://…’, 0, $ctx);

    To: Strike
    Все там есть и порт и прокси даже указать можно, если ничего не знаешь – зачем писать про эту функцию.
    Вот тебе еще

    // Define a context for HTTP.
    $aContext = array(
    ‘http’ => array(
    ‘proxy’ => ‘tcp://127.0.0.1:8080′, // This needs to be the server and the port of the NTLM Authentication Proxy Server.
    ‘request_fulluri’ => True,
    ),
    );
    $cxContext = stream_context_create($aContext);

    // Now all file stream functions can use this context.

    $sFile = file_get_contents(»http://…», False, $cxContext);

    echo $sFile;

  8. test 17 октября 2008 at 20:24 Permalink

    а вот русский не хавает :(

  9. Алексей 20 октября 2008 at 2:35 Permalink

    по примеру переводчика хотел сделать парсер текстов песен! но что то не работает, может кто поможет? мне кажеться очень полезно было бы. вот код:

    <?php
    function text($artist,$title) {
    $title = urlencode($title);
    $artist = urlencode($artist);
    $link = file_get_contents(»http://www.lyricsplugin.com/wmplayer03/plugin/?artist=$artist&title=$title»);
    preg_match(’/(.*?)/’, $link, $out);
    return $out[1];
    }
    //http://www.lyricsplugin.com/wmplayer03/plugin/?artist=Каста&title=Ревность
    echo text(»Каста», «Ревность»)

    ?>

  10. Металлоконструкции 2 марта 2010 at 17:55 Permalink

    Айпи постоянно банится.


Оставить комментарий