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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Perl + twitter + русский язык, проблема с кодировкой 
:(
    Опции темы
materiya
Дата 9.6.2011, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Доброго времени суток.
есть проблема:
мой скрипт ищет посты в твитере по ключевым словам и фолловит хозяина поста.


Код

2my $mt = Net::Twitter::Search->new;
my $r = $mt->search({q=>'football',since_id=>$conf[0],rpp=>100});


выше указанный код работает хорошо.
но если вместо football написать русское слово, то скрипт ничего не находит

скриншот http://i076.radikal.ru/1106/4f/110a5733b96c.jpg

Подскажите, пожалуйста, кто знает что ему нужно.
Спасибо
PM MAIL   Вверх
arto
Дата 9.6.2011, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1495
Регистрация: 31.10.2004

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



правильную кодировку
PM MAIL ICQ   Вверх
materiya
Дата 9.6.2011, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(arto @ 9.6.2011,  12:08)
правильную кодировку

логично

Цитата

правильную кодировку


логично, а может подскажете каким образом? не особо дружу с перлом. скажем так, вообще не дружу, но требование усовершенствовать именно этот скрипт
PM MAIL   Вверх
arto
Дата 9.6.2011, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1495
Регистрация: 31.10.2004

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



в вашем коде не видно, в какой кодировке у вас текст.

# perl -MEncode=_utf8_on -MNet::Twitter:smile -le '$nt = new Net::Twitter:smile; binmode STDOUT, ":encoding(utf8)"; _utf8_on($ARGV[0]); $a = $nt->search({q => $ARGV[0]}); foreach my $st (@{ $a->{results} }) { print $st->{text} }' Футбол
Тюмень: хоккейные болельщики будут играть ...в футбол http://bit.ly/iV70sr
ФУТБОЛ. "Реал" предлагает за Агуэро 45 млн. и права на Диарра и Негредо http://bit.ly/jS7tuw
Наконец-то это ### закончилось. Теперь даже как-то скучно. Хотя... КОНЬЯК! ФУТБОЛ! ТЕЛОЧКИ! СВОБОДА! Чё еще надо?
Футбол - Чемпионат Англии - Маркус Ханеманн стал свободным агентом: Голкипер Вулверхэмптона американец Маркус ... http://bit.ly/iSzmGL
Футбол - Чемпионат Англии - Маркус Ханеманн стал свободным агентом  #followback
тренировка зашибись. зарубились в футбол и успели со всеми переругаться! было жарко!!!
Футбол без Аршавина. Сборная России наконец-то провела неплохой товарищеский матч http://bit.ly/mPjRMi
#футбол Ювентус намерен приобрести полузащитника Порту Фернандо: Ювентус намерен приобрести полузащитника ... http://bit.ly/jse6Qy
#sport1bg Финалът за Купата на България по футбол за жени ще се проведе на 15-ти юни: Финалният мач за Купата на... http://bit.ly/injy3d
Футбол - 11 воинов в поле: 
                        В Китае прошел необычный футбольный матч в формате 11 на 100. http://bit.ly/jdokUA
Футбол - 11 воинов в поле  #followback RT!!
Футбол - Чемпионат Испании - Кака: В Интер я не ухожу: 
                        Полузащитник мадридского Реала Кака развеял слу... http://bit.ly/lJdZe4
слушаю спортивный канал на Маяке))опять про наш футбол будут говорить)))скока можно)
ФУТБОЛ. Булат Чагаев хочет переименовать "Ксамакс" http://tinyurl.com/3ojgec6
ФУТБОЛ. Булат Чагаев хочет переименовать "Ксамакс" http://bit.ly/loIU8R #sport #news

PM MAIL ICQ   Вверх
materiya
Дата 9.6.2011, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



спасибо, сейчас попробую

только в Вашем сообщении смайлики вывелись)))
не могли бы Вы написать код без них?)

Это сообщение отредактировал(а) materiya - 9.6.2011, 12:41
PM MAIL   Вверх
arto
Дата 9.6.2011, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1495
Регистрация: 31.10.2004

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



это Net::Twitter::Search
PM MAIL ICQ   Вверх
materiya
Дата 9.6.2011, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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

Код

#!/usr/bin/perl -w
use Net::Twitter;
use Net::Twitter::Search;
use Scalar::Util 'blessed';
use Data::Dumper;
  my $twi = Net::Twitter->new(
      traits   => [qw/OAuth API::REST/],
      consumer_key        => '',
      consumer_secret     => '',
      access_token        => '',
      access_token_secret => '',
  );
my $path='C:/tbot/';
my @conf=();
open (S,$path.'t_conf.txt') || die 'cant open';
@conf=<S>;
chomp @conf;
close(S); 
$conf[0]=0 if ! $conf[0];
  my $mt = Net::Twitter::Search->new;
  
  my $r = $mt->search({q=>'dreamfoot OR "football manager" OR "soccer manager"',since_id=>$conf[0],rpp=>100});

  my %targets=();
  $targets{$_->{from_user_id}}=$_->{from_user} foreach @{$$r{results}};
  my $reqs=0; 
  if (scalar(keys %targets)){  
          my %sended=();          
          open (F,$path.'t_requested.txt');
          my @reqs=<F>;
          chomp @reqs;
          foreach (@reqs){$sended{$_}=''}
          close(F);          
          foreach (keys %targets) {
            if (! exists $sended{$_})    {
                                            #create friend;
                                            print "$_ $targets{$_}\n";
                                            eval {$twi->create_friend($targets{$_})};
                                            $reqs++;
                                            open (S,'>>'.$path.'t_requested.txt') || die 'cant open';
                                            print S $_."\n";
                                            close(S);
                                            if ($reqs>10000){$$r{max_id}=0;last;}    
                                        }
          } 
  }
open (S,'>'.$path.'t_conf.txt') || die 'cant open';
print S $$r{max_id}."\n";
close(S);   
# print Dumper $r;


Это сообщение отредактировал(а) materiya - 9.6.2011, 12:49
PM MAIL   Вверх
arto
Дата 9.6.2011, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1495
Регистрация: 31.10.2004

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



какое ключевое слово?
я в вашем твитере не разбираюсь.
PM MAIL ICQ   Вверх
materiya
Дата 9.6.2011, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата

какое ключевое слово?

ну вот в строке 

Код

my $r = $mt->search({q=>'dreamfoot OR "football manager" OR "soccer manager"',since_id=>$conf[0],rpp=>100});


dreamfoot, football manager и soccer manager - это ключевые слова.

а в Вашем коде 

Код

$a = $nt->search({q => $ARGV[0]}); 
foreach my $st (@{ $a->{results} }) 
{ print $st->{text} }'


я так понимаю ключевое слово это  $ARGV[0].
или вместо  $ARGV[0] нужно вписать слово?
PM MAIL   Вверх
arto
Дата 9.6.2011, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1495
Регистрация: 31.10.2004

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



$ARGV[0] -- параметр командной строки, у меня -- Футбол
PM MAIL ICQ   Вверх
FreeGanzter
Дата 9.6.2011, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Кстати в perl +Padre есть функция вывода сообщения в какой кодировке выводить
Пробуй запустить скрипт не из командной строки а с IDE Padre и пробуй разные кодироки пока нибудет читаемым
PM MAIL   Вверх
materiya
Дата 9.6.2011, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(arto @ 9.6.2011,  13:49)
$ARGV[0] -- параметр командной строки, у меня -- Футбол


у меня ошибка

в приложении сктриншот

Это сообщение отредактировал(а) materiya - 9.6.2011, 14:54

Присоединённый файл ( Кол-во скачиваний: 6 )
Присоединённый файл  __________.JPG 23,65 Kb
PM MAIL   Вверх
alezzz
Дата 9.6.2011, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


сплю...
**


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

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



Windows понимает только двойные кавычки (во всяком случае у меня не получилось запускать командлайны с одинарными). Запускайте из файла или из редактора.
PM MAIL   Вверх
materiya
Дата 9.6.2011, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(alezzz @ 9.6.2011,  15:35)
Windows понимает только двойные кавычки (во всяком случае у меня не получилось запускать командлайны с одинарными). Запускайте из файла или из редактора.

мне как раз из файла и  нужно. но у меня не получается эту команду

Код

perl -MEncode=_utf8_on -MNet::Twitter::Search -le '$nt = new Net::Twitter::Search; 
binmode STDOUT, ":encoding(utf8)"; _utf8_on($ARGV[0]); $a = $nt->search({q => $ARGV[0]}); 
foreach my $st (@{ $a->{results} }) { print $st->{text} }' Футбол


записать в файле. точнее я не знаю как это правильно сделать. 

меня хватило только чтобы додуматься до этого:

Код

my $mt = Net::Twitter::Search->new;
  #
  my $zap='новости';
  binmode STDOUT, ":encoding(utf8)"; _utf8_on($zap);
  my $r = $mt->search({q=>$zap,since_id=>$conf[0],rpp=>100});


но оно так не работает и выдает ошибки

Это сообщение отредактировал(а) materiya - 9.6.2011, 16:23
PM MAIL   Вверх
arto
Дата 9.6.2011, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1495
Регистрация: 31.10.2004

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



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


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

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


 




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


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

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