Реализация на языке perl
Perl — высокоуровневый интерпретируемый динамический язык программирования общего назначения, созданный Ларри Уоллом,лингвистом по образованию. Название языка представляет собой аббревиатуру, которая расшифровывается как Practical Extraction and Report Language — «практический язык для извлечения данных и составления отчётов»[2]. Первоначально аббревиатура состояла из пяти символов и в таком виде в точности совпадала с английским словом pearl («жемчужина»). Но затем стало известно, что такой язык существует (см. PEARL (англ.)), и букву «a» убрали. Символом языка Perl является верблюд — не слишком красивое, но очень выносливое животное, способное выполнять тяжёлую работу.
Основной особенностью языка считаются его богатые возможности для работы с текстом, в том числе работа с регулярными выражениями, встроенная в синтаксис. Перл унаследовал много свойств от языков Си, AWK, скриптовых языков командных оболочек UNIX.
Perl также знаменит огромной коллекцией дополнительных модулей CPAN, находящейся по адресу http://www.cpan.org.
Для работы нужны две библиотеки
backportPP.pm - http://cpansearch.perl.org/src/MAKAMAKA/JSON-2.49_01/lib/JSON/backportPP.pm ( ее нужно положить в директорию JSON)
и JSON - http://search.cpan.org/~makamaka/JSON-2.53/lib/JSON.pm
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | use LWP::UserAgent; use JSON; sub dopost { my $ua = LWP::UserAgent->new(); my $url = 'http://smartfetch.io/'.$_[0].'/api2/'; my $content = $ua->post($url, $_[1])->decoded_content(); return decode_json($content); } my $data = { task => 'google_ru', data => encode_json({ # ### Задание - это список ассоциативных массивов Ключ-Значение data => [ [ 'id' => 'ID', 'phrase' => 'Фраза', 'region' => 'Регион', 'domain' => 'Домен' ], [ 'id' => 'ID', 'phrase' => 'Фраза', 'region' => 'Регион', 'domain' => 'Домен' ], [ 'id' => 'ID', 'phrase' => 'Фраза', 'region' => 'Регион', 'domain' => 'Домен' ] ], param => {} }) }; my $apikey = "[API КЛЮЧ]"; # его можно посмотреть на странице http://smartfetch.io/private/profile/ my $res = dopost($apikey, $data); binmode(STDOUT, ":utf8"); #Для вывода utf-8 без варнинга if ($res->{success}) { print 'ok ',$res->{hash}; } else { if (exists $res->{message}) { print 'error ',$res->{message}; } else { print 'error'; } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | use LWP::UserAgent; use JSON; use IO::Uncompress::Unzip qw(unzip $UnzipError); use Data::Dumper; sub doget { my $ua = LWP::UserAgent->new(); my $url = 'http://smartfetch.io/'.$_[0].'/get/'.$_[1]; my $resp = $ua->get($url); my $content = $resp->decoded_content(); my $code = $resp->code(); return {code => $code, content => $content} } my $apikey = "[API КЛЮЧ]"; # его можно посмотреть на странице http://smartfetch.io/private/profile/ my $hash = ИДЕНТИФИКАТОР; my $resp = doget($apikey,$hash); binmode(STDOUT, ":utf8"); #Для вывода utf-8 без варнинга if ($resp->{code}==200) { my $z = new IO::Uncompress::Unzip \$resp->{content} or die "unzip failed: $UnzipError\n"; my $buffer; my @columns; my $obj; while (!$z->eof()) { $hdr = $z->getHeaderInfo(); $z->read($buffer, $hdr->{UncompressedLength}); if ($hdr->{Name} eq 'column.txt') { @columns = split(',', $buffer); # Читаем колонки. В зип-архиве файл column.txt идет первым, # поэтому список колонок будет доступен при работе с json-файлом ниже. } else { $obj = decode_json($buffer); print Dumper($obj); # Работаем с данными как угодно } $z->nextStream(); } } else { print $resp->{content}; # Опять так, по идее сервер должен отдавать json, но отдает html. Переделать на json # не составит никакого труда. } |