11 ноября 2009, 18:31
Копал-копал и нашёл как сделать Google Maps статичной картинкой.
Поддерживается до 640×640, формат — .gif
Ссылка вида http://maps.google.com/staticmap?center=Координаты&zoom=Зум&size=ШиринаxВысота&markers=Координаты маркера по желанию
10 ноября 2009, 16:49
Хозяйке на заметку:
Два+ пробела заменяются не так:
perl -le ‘use Data::Dumper; my $x = «abc bca \n \t abc bca»; $x =~ s/\s{2,}/ /g; print Dumper $x’
$VAR1 = ‘abc bca abc bca’;
Два+ пробела заменяются так:
perl -le ‘use Data::Dumper; my $x = «abc bca \n \t abc bca»; $x =~ s/[[:blank:]]{2,}/ /g; print Dumper $x’
$VAR1 = ‘abc bca
abc bca’;
4 сентября 2009, 17:00
Для одной мерзкой цели потребовалось ходить в ЖЖ через HTTP — так удобней парсить некоторые вещи.
Собственно, сниппет под катом.
Пара слов о куках. Мне стало уже лениво писать под них лишние регулярки — но список их следующий:
- ljuniq
- ljmastersession
- ljloggedin
- BMLschemepref (схема кстати — кому хочется обратно dystopia — просто смените эту куку)
- langpref
- ljsession
- ljdomsess.{username} — у меня, соответственно, ljdomsess.skazo4nik
Читать пост целиком »
4 сентября 2009, 14:03
Берём поисковый таймлайн по слову, к примеру, ru_followfriday и френдим всех кого ещё не френдим. В минуту в среднем можно делать 2-3 запроса — поэтому спим с рандомчиком.
#!/usr/bin/perl -w
use strict;
use WWW::Curl::Easy;
my $login = q[skazkin];
my $password = q[];
my $href = qq[http://search.twitter.com/search.atom?lang=en&q=ru_followfriday&rpp=100];
my $result = callTwitter({href=>$href});
my (@toFollow, $followed);
if($result->{content}){
while($result->{content} =~ /@([a-z0-9_]+)/ig){
my $name = $1;
while(1){
$followed = callTwitter({href=>qq[http://twitter.com/friendships/show.xml?source_screen_name=$name&target_screen_name=$login]});
if($followed->{content}=~/150 requests/){
print qq[Rate limit exceeded — sleep for one hour.\n];
sleep(3600);
}
last;
}
sleep(25+rand(5));
$followed->{content} =~ s/\n//g;
my $following_status = q[];
$following_status = $1 if $followed->{content} =~ /$login.*?([^<]+)<\/following>/i;
print $name.» — «.$following_status.»\n»;
push(@toFollow,$name) if $following_status eq q[false];
}
print qq[Ready to follow ].($#toFollow+1).qq[ pupils\n];
foreach(@toFollow){
print qq[Following $_\n];
callTwitter({href=>qq[http://twitter.com/friendships/create/$_.xml?follow=true],post=>1});
sleep(25+rand(5));
}
}
sub callTwitter {
my $params = shift;
my ($result, $retcode, $curl) = (‘false’,undef,undef);
$curl = new WWW::Curl::Easy;
$curl->setopt(CURLOPT_URL, $params->{href});
$curl->setopt(CURLOPT_USERPWD, $login.q[:].$password);
$curl->setopt(CURLOPT_POST, 1) if $params->{post};
$curl->setopt(CURLOPT_POSTFIELDS, $params->{post}) if ($params->{post} && $params->{post}=~/=/);
open (my $tmp_for_curl, «>», \$result);
$curl->setopt(CURLOPT_FILE,$tmp_for_curl);
$retcode = $curl->perform;
return {retcode => $retcode, content => $result};
}
Ещё не проверял — пока тестил — выбрал 150 часовых запросов.
31 августа 2009, 16:51
Вызывается с параметром тег [сколько записей смотреть на предмет твиттерчан, по умолчанию 100]
Типа
perl script.pl followfriday 80
— пролистает 80 последних записей ленты и вычленит из них все встречающиеся ники, которые потом поделит на посты до 140 символов.
Запись в кроне, соответственно —
# пятница
10 16 * * 5 perl script.pl followfriday
# понедельник
10 16 * * 1 perl script.pl sexymonday
# среда
10 16 * * 3 perl script.pl tinyfriday
Читать пост целиком »
31 августа 2009, 16:04
Предположим, что сегодня — 31 августа.
<script type=»text/javascript»>
var d=new Date();
d.setUTCMonth(0);
document.write(d);
</script>
Логично предположить что это выдаст январь.
Попробуем
<script type=»text/javascript»>
var d=new Date();
d.setUTCMonth(1);
document.write(d);
</script>
Казалось бы — февраль? А нет, на дворе март.
Играемся со втормы параметром.
<script type=»text/javascript»>
var d=new Date();
d.setUTCMonth(1,0);
document.write(d);
</script>
Вот и январь опять вернулся.
<script type=»text/javascript»>
var d=new Date();
d.setUTCMonth(1,1);
document.write(d);
</script>
А это уже — первое февраля.
Удивительное рядом — второй параметр по дефолту принимает текущий день! Так что дату надо ставить принудительно!
28 августа 2009, 10:03
Цель скрипта проста — он берёт последние 50 записей, выдирает оттуда твиттерчан и постит их ники под тегом #followfriday )
#!/usr/bin/perl -w
use strict;
use WWW::Curl::Easy;
use Data::Dumper;
use URI::Escape;
my $login = q[skazkin];
my $password = q[password];
my $href = "http://twitter.com/statuses/friends_timeline.xml?count=50";
my $message_dummy = "#followfriday ";
my (@posts, %tmp, @people);
my $lenta = callTwitter({href=>$href});
while($lenta->{content} =~ /(@[a-z0-9_]+)/ig){
push(@people, $1);
}
@people = grep(!$tmp{$_}++, @people);
while($#people != -1){
my $msg = $message_dummy;
while(length $msg < 140){
last if $#people == -1;
my $name = shift @people;
if((length $name) + (length $msg) > 140){
push (@people, $name);
last;
}
$msg .= $name.q[ ];
}
push(@posts,$msg);
}
$href = "http://twitter.com/statuses/update.xml";
foreach(@posts){
callTwitter({
href => $href,
post => "status=".uri_escape($_)
});
sleep(1);
}
sub callTwitter {
my $params = shift;
my ($result, $retcode, $curl) = ('false',undef,undef);
$curl = new WWW::Curl::Easy;
$curl->setopt(CURLOPT_URL, $params->{href});
$curl->setopt(CURLOPT_USERPWD, $login.q[:].$password);
$curl->setopt(CURLOPT_POST, 1) if $params->{post};
$curl->setopt(CURLOPT_POSTFIELDS, $params->{post}) if $params->{post};
open (my $tmp_for_curl, ">", \$result);
$curl->setopt(CURLOPT_FILE,$tmp_for_curl);
$retcode = $curl->perform;
return {retcode => $retcode, content => $result};
}