Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> MediaWiki::API->upload(), проблемы с кодировкой 
:(
    Опции темы
AnatolyLumov
Дата 27.9.2011, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 27.9.2011

Репутация: нет
Всего: нет



Имеется следующая процедура на Perl:

Код

sub up_file {
    my ($api, $name, $url, $sum, $reupload) = @_;
    
    my $res = $api->api({
        action => 'query',
        prop => 'info',
        titles => $name
    }) || return $api->{error}->{details};
    my $missing = exists((values %{$res->{query}->{pages}})[0]->{missing});

    my $ua = LWP::UserAgent->new( timeout => 25 );
    my $response = $ua->get($url);
    $response = $response->decoded_content if($response->is_success());
    
    if((!$missing && $reupload) || $missing) {
        $api->edit({
            action => 'upload',
            filename => $name,
            comment => $sum,
            text => $sum,
            file => $response,
            ignorewarnings => 1
        }) || return 'Error with upload file ' . $name . ': ' . $api->{error}->{details};
        return 'done';
    }
    return 'File ' . $name . ' exist and $reupload is undefined';
}


Переменные: $api -> объект MediaWiki::API, вызываемый из основной программы, $name -> название файла в формате MediaWiki, $url -> адрес файла для получения его содержимого, $sum -> описание файла для системы контроля версий, $reupload -> если определено, позволяет перезаписывать имеющийся файл.

При вызове процедуры отдает: "HTTP::Message content must be bytes at /usr/local/share/perl/5.10.0/HTTP/Request/Common.pm line 91".

Как это можно исправить?
PM MAIL   Вверх
Pfailed
Дата 27.9.2011, 20:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 19.7.2009

Репутация: 2
Всего: 39



Полагаю так
Код

-$response = $response->decoded_content if($response->is_success());
+$response = $response->content if($response->is_success());



--------------------
PM MAIL   Вверх
AnatolyLumov
Дата 27.9.2011, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 27.9.2011

Репутация: нет
Всего: нет



Цитата(Pfailed @ 27.9.2011,  20:11)
Полагаю так
Код

-$response = $response->decoded_content if($response->is_success());
+$response = $response->content if($response->is_success());

То же самое.
PM MAIL   Вверх
Pfailed
Дата 27.9.2011, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 19.7.2009

Репутация: 2
Всего: 39



Странно. Тогда utf8::downgrade($response)


--------------------
PM MAIL   Вверх
AnatolyLumov
Дата 27.9.2011, 23:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 27.9.2011

Репутация: нет
Всего: нет



Цитата(Pfailed @ 27.9.2011,  20:56)
Странно. Тогда utf8::downgrade($response)

По всей видимости это не utf8. В эту переменную передаются данные изображения. Т. е. вот

Код

$response = $response->content() if($response->is_success());
die Dumper($response);

Код

$ perl test.pl
$VAR1 = '▒PNG

IHD▒6n▒sRGB▒▒▒gAMA▒▒
                    ▒a cHRMz&▒▒▒▒▒u0▒`:▒p▒▒Q<!IDATWc▒
▒*1▒▒Ig▒
▒▒▒+(▒▒K▒&֘IEND▒B`▒';


Код

$response = $response->decoded_content() if($response->is_success());
die Dumper($response);

Код

$ perl test.pl
$VAR1 = '▒PNG

IHD▒6n▒sRGB▒▒▒gAMA▒▒
                    ▒a cHRMz&▒▒▒▒▒u0▒`:▒p▒▒Q<!IDATWc▒
▒*1▒▒Ig▒
▒▒▒+(▒▒K▒&֘IEND▒B`▒';


Код

$response = $response->content() if($response->is_success());
$response = utf8::downgrade($response);
die Dumper($response);

Код

$ perl test.pl
$VAR1 = 1;


Без Data::Dumper отдает то же самое.
Но, по идее, раз в этом модуле реализовали функцию upload(), должна быть какая-то возможность заставить ее работать.
PM MAIL   Вверх
Pfailed
Дата 28.9.2011, 05:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 19.7.2009

Репутация: 2
Всего: 39



Я опять напутал с этими функциями, нужно utf8::encode($response)


--------------------
PM MAIL   Вверх
ginnie
Дата 28.9.2011, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 4
Всего: 49



AnatolyLumov, может получится, если почитать документацию, начиная с "You can also give the data to be uploaded directly..."?


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: CGI программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к CGI программированию
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", качать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: разработка для Web | Следующая тема »


 




[ Время генерации скрипта: 0.0770 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.