photo

Твитты за сегодня

  • 10:04 Вчера перестала работать спамооборона-1024. Просто сервер @yandex рвет соединение сразу после коннекта. Отписал в поддержку #
  • 10:20 Мегафон и вправду очень плохо работает с твиттером. Сплошные таймауты :( #
  • 13:32 Обед! Курица с картошкой и RT @1chameleon: Обед! Пончики с компотом =) #
  • 14:41 Ок, теперь когда идем на обед, пишем тег #ru_obed :) RT @1chameleon: согласен. Остановимся на твоём варианте. :) #
  • 15:02 Послушал ваш первый подкаст, понравилось, спасибо! Ждем еще! @viteker, @lajbo4ka #
  • 20:47 Кто-нибудь кроме меня любит смотреть "Папины дочки"? :) #
photo

Твитты за сегодня

  • 09:38 Вам тоже доброе утро :) @omally13 @DiorShine @skorr @lajbo4ka и всем остальным! #
  • 10:44 Мое утро на работе twitpic.com/hou8z #
  • 10:57 У Moby все-таки отличные песенки! Сейчас слушаю "Honey" #
  • 12:31 Кто-нибудь уже нашел свою машину на Street View от яндекса? :) #
  • 13:57 RT artrudenko: Нужен шрифт Meta Normal C срочно #
  • 13:57 Давайте адресом вконтакта обмениваться: vkontakte.ru/id346321 #
photo

Твитты за сегодня

  • 14:12 Доброго дня всем друзьям! Сегодня воскресенье - еще можно отдыхать :) #
  • 21:06 Нашел среди улицы бесплатный wifi спот МГТС-а. Гуляю с собакой и смотрю YouTube #
photo

Твитты за сегодня

  • 18:25 А мне нравится постить в твиттер с айфона. Правда пока не привык :-) #
  • 23:30 Посмотрели Идеальный побег. Моя оценка 4 из 5 #
photo

Твитты за сегодня

  • 11:15 Выложил свои скрипты кросспостинга twitter->vkontakte и blogger->lj
    bit.ly/CXmvj #
  • 11:38 RT @ekozlov: Нашел где можно прокатнуться на реактивном самолете - bit.ly/4CypGE Надо добавить в вишлист ;)) #
  • 11:55 А у нас @yandex на своем Street View номера машин не затирает! #
  • 22:58 Подскажите прикольные free игры для iPhone? :) #
photo

Мои скрипты blogger2lj и twitter2vkontakte

Решил выложить свои скрипты для кросспостинга, а то многие просят.

Сперва Кросспостринг из твиттера на вконтакте. В настройках укажите логин/пароль от сервисов. Также понадодобятся модули Net::Twitter, WWW::Curl::Easy, WWW::Curl::Share, Text::Iconv,
У меня скрипт запускается по крону каждые 10 минут

twi2vk.pl

#!/usr/bin/perl
use strict;
use warnings;
use Net::Twitter;
use WWW::Curl::Easy;
use WWW::Curl::Share;
use URI::Escape;
use Text::Iconv;
use CGI;
use CGI qw /unescapeHTML/;

my $c = Text::Iconv->new('utf-8','utf-8');
my $q = new CGI;

my $twlogin = 'neptunix';
my $twpass = '';
my $vklogin = '';
my $vkpass = '';
my $debug = 0;
my $add = '';
#my $add = ' « http://twitter.com/neptunix »'; # Что добавить в конец сообщения


my $nt = Net::Twitter->new(
traints => [qw/API::REST/],
username => $twlogin,
password => $twpass
);

my $twitterStatus;
eval {
my $statuses = $nt->user_timeline({count => 20});
for my $status (@$statuses){
if ($status->{text} !~ m/^\@/){ # Убираем реплаи
$twitterStatus = "$status->{text}";
last;
}
}
};

if (my $err = $@) {
die $@ unless $err && $err->isa('Net::Twitter::Error');

warn "HTTP Response Code: ", $err->code, "\n",
"HTTP Message: ", $err->message, "\n",
"Twitter error: ", $err->error, "\n";
}

# Vkontakte

my $curlsh = new WWW::Curl::Share;
$curlsh->setopt(CURLSHOPT_SHARE, CURL_LOCK_DATA_COOKIE);
$curlsh->setopt(CURLSHOPT_SHARE, CURL_LOCK_DATA_DNS);

# Setting the options
my $curl = new WWW::Curl::Easy;
$curl->setopt(CURLOPT_HEADER,1);
$curl->setopt(CURLOPT_URL, 'http://pda.vkontakte.ru/login?pda=index&acknowledge=0');
my $response_body = '';
open (my $fileb, ">", \$response_body);
$curl->setopt(CURLOPT_WRITEDATA,$fileb);
$curl->setopt(CURLOPT_SHARE, $curlsh);
$curl->setopt(CURLOPT_POST, 1);
$curl->setopt(CURLOPT_POSTFIELDS, "email=$vklogin&pass=$vkpass");

# Starts the actual request
my $retcode = $curl->perform;
# Looking at the results...
if ($retcode == 0) {
print("Transfer went ok\n") if($debug==1);
my $response_code = $curl->getinfo(CURLINFO_HTTP_CODE);
# judge result and next action based on $response_code
print("Received response: $response_body\n") if($debug==1);
} else {
print("An error happened: ".$curl->strerror($retcode)." ($retcode)\n");
exit 0;
}

# Request status edit form
$curl->setopt(CURLOPT_URL, 'http://pda.vkontakte.ru/status');
$curl->setopt(CURLOPT_POST, 0);
# Starts the actual request
$retcode = $curl->perform;
# Looking at the results...
if ($retcode == 0) {
print("Transfer went ok\n") if($debug==1);
my $response_code = $curl->getinfo(CURLINFO_HTTP_CODE);
# judge result and next action based on $response_code
print("Received response: $response_body\n") if($debug==1);
} else {
print("An error happened: ".$curl->strerror($retcode)." ($retcode)\n");
exit 0;
}

my $activityhash = '';
if($response_body =~ /name="activityhash" value="(\w+)"/){
$activityhash = $1;
} else {
print "An error happened: no activityhash found\n";
exit 0;
}

my $status = '';
if($response_body =~ /class="pad">\s+(.*)<br\/>/){
$status = $1;
} else {
print "An error happened: no status found\n";
exit 0;
}

if($status !~ /\.\.$/) {$status =~ s/(.*)\.$/$1/;}
$status =~ s/\S+\s+\S+\s+\S+\s+(.*)/$1/;
$status = unescapeHTML($status);

$twitterStatus = $c->convert($twitterStatus);

$twitterStatus .= $add;

if ($status eq $twitterStatus) {
if($debug) {print "Same status: $status\n";}
}

else {
if($debug) {
print "$status\n";
print "$twitterStatus\n";
}

## Update status
$curl->setopt(CURLOPT_URL, 'http://pda.vkontakte.ru/setstatus?pda=1');
$curl->setopt(CURLOPT_POST, 1);
$curl->setopt(CURLOPT_POSTFIELDS, 'activityhash=' . $activityhash . '&setactivity=' . uri_escape($twitterStatus));

# Starts the actual request
$retcode = $curl->perform;
if ($retcode == 0) {
print("Transfer went ok\n") if($debug==1);
my $response_code = $curl->getinfo(CURLINFO_HTTP_CODE);
# judge result and next action based on $response_code
print("Received response: $response_body\n") if($debug==1);
} else {
print("An error happened: ".$curl->strerror($retcode)." ($retcode)\n");
}

}



Постинг из Blogger в LiveJournal
Для работы нужно создать файл lastid.txt в той же директории (или прописать путь к нему), что и скрипт с правами на запись: touch lastid.txt;
chown user:user lastid.txt (user - пользователь от которого запускается скрипт)
У меня постинг работает по крону раз в сутки ночью
Здесь используются модули LJ::Simple, XML::FeedPP, Time::ParseDate

blogger2lj.pl

#!/usr/bin/perl
use strict; # Silly not to be
use POSIX; # For strftime()
use LJ::Simple;
use XML::FeedPP; # Parse Atom feed
use Time::ParseDate; # Parse date from feed

## Lj posting code taken from from ljpost

my $source = 'http://blogger.feed.source';
my $idfile = "lastid.txt";
my $user='lj-login';
my $pass='lj-pass';
my $post;
my $autoformat=0;
my $allowcomments=1;
my $add_to_post; # Эта переменная добавляется к посту. Определена ниже.

##
## Получаем фид и берем ID из файла
##
my $feed = XML::FeedPP->new( $source );

my $lastid; # Последний id

if(open(FILE, "$idfile")){
$lastid = readline(FILE);
chomp($lastid);
close(FILE);
}

# Просмотр списка на наличие ID и ищем его в файле


my @add; # Массив для добавления постов

foreach my $item ( $feed->get_item() ) {
my $id = $item->guid(); $id =~ s/.*post-(\d+)/$1/;
if ($id != $lastid) {
# Если новый id не соответствует старому - добавить в очередь на постинг (в массив $add)
push @add, $id;
}
else { last; }
}


##
## Начало цикла постинга в ЖЖ
##

my $last_good_id;
$|=1;
($LJ::Simple::VERSION<0.07) && ($LJ::Simple::timeout = 300);
my $lj = new LJ::Simple({ user=>$user,pass=>$pass });
(defined $lj) || die "$0: Failed to log into LJ - $LJ::Simple::error\n";


for(my $i=$#add; $i>=0; $i--){
foreach my $item ( $feed->get_item() ) {
my $id = $item->guid(); $id =~ s/.*post-(\d+)/$1/;
if($id == $add[$i]) { # Мы нашли наш пост. Будем его обрабатывать

my %Event=();
$lj->NewEntry(\%Event) || die "$0: Failed to prepare event - $LJ::Simple::error\n";

my $time = parsedate( $item->pubDate );
my(undef,$mins,$hrs,$dy,$mn,$yr,undef,undef,$l8)=localtime($time);

my $goodtime = mktime(0,$mins,$hrs,$dy,$mn,$yr,0,0,$l8);
$lj->SetDate(\%Event,$goodtime);

my $subject = $item->title();
($subject ne "") && $lj->SetSubject(\%Event,$subject);

my $tags;
if(ref($item->category())){
$tags = join (",", @{$item->category()});
}
else {
$tags = $item->category();
}
($tags ne "") && $lj->Setprop_taglist(\%Event,split(/,\s*/,$tags));

if ($autoformat) {
print "Autoformat: yes\n";
$lj->Setprop_preformatted(\%Event,1) ||
die "$0: Failed to set entry as preformatted - $LJ::Simple::error\n";
}

my $link = $item->link();
$add_to_post = <<END;
<br/>
<div style="position: relative; background-color: #b8daee; border: #98c6e2 1px dotted; padding: 5px; margin: 2px; text-align: center; clear:both">Запись опубликована в блоге blog.brigadirov.com. Лучше оставляйте свои комментарии <a href="$link">там</a>. Но можно и тут.</div>
END

my $post = $item->description();
$post .= $add_to_post;
$lj->SetEntry(\%Event,$post) ||
die "$0: Failed to set entry - $LJ::Simple::error\n";

if($allowcomments==0){
$lj->Setprop_nocomments(\%Event,1) ||
die "$0: Failed to set property - $LJ::Simple::error\n";
}
my ($item_id,$anum,$html_id)=$lj->PostEntry(\%Event);

if (defined $item_id) {$last_good_id = $id;}

(defined $item_id) ||
die "$0: Failed to post entry - $LJ::Simple::error\n";

}
}
}

if(defined $last_good_id) {
if(open(FILE, ">$idfile")){
print FILE $last_good_id;
close(FILE);
}
}


Запись опубликована в блоге blog.brigadirov.com. Лучше оставляйте свои комментарии там. Но можно и тут.
photo

Твитты за сегодня

  • 09:16 Доброе утро, твиплы! Помогите пожалуйста с голосованием :) bit.ly/3cK0CO #
  • 09:53 Написал вкратце об основных новинках вчерашнего Apple Event: bit.ly/ieaFN #
  • 10:04 Поставил iTunes 9. Экспорт на last.fm не нашел #
  • 15:27 Офигеть! Чего я не ожидал - так это Street View от Яндекса. Пускай и работает пока как-то не очень. Но прогресс на лицо! bit.ly/22S1s #
  • 16:36 RT @maxmoriss: Обходите стороной тур-оператора АМИГО-С Запороли нам шенген, собрали неполный пакет документов! В итоге ни визы ни денег! #
  • 16:58 Никогда не оставляйте дома полную бутылку с квасом на солнце. Поставил, забыл, а через неделю взорвалась :( yfrog.com/0tnlfxj #
  • 19:31 Заехал на мойку, а то уже машина уже превратилась в матово-серую! #
photo

Apple Event 09.09.09


Вчера случился Apple Event, где были представлены некоторые новинки продукции и программного обеспечения. Появление Стива на сцене встречали бурными аплодисментами! Он вернулся после операции по пересадки печени.


Расскажу вкратце об основных новинках ...



Вышла прошивка iPhone 3.1 и уже доступна к загрузке. Конечно рекомендуется к обновлению только пользователям официально-разлоченных телефонов!



Обновилась линейка плееров iPod - от самого младшего iPod Shuffle и до iPod Classic и iPod Touch. Новые шафлы доступны теперь в 5 цветах ($59 и $79) и специальный вариант - в корпусе из нержавеющей стали ($99).
Classic увеличил вместительность жесткого диска до 160Гб, Touch теперь появился с топовой памятью в 64Гб! По сути это тот же iPhone 3GS только без GSM модуля.





iPod shuffle получил интересное обновление в виде появления видео-камеры способной снимать видео с разрешением 640x480 при 30 кадрах в секунду в формате H.264 с AAC звуком. Синхронизация с iTunes позволяет сразу закачать видео на компьютер и залить на YouTube. Модели выпускаются с памятью в 8 и 16 Гб. И это первый iPod, который обзавелся встроенным радио!




Новый iTunes 9 / iTunes LP. Теперь исполнители могут сами добавлять информацию о себе в виде дискографий, видео, фотографий, текстов песен в своем дизайне.

Сортировка приложения iPhone/iPod Touch теперь возможна прямо из iTunes. Здесь даже можно сортировать экраны приложений!


Запись опубликована в блоге blog.brigadirov.com. Лучше оставляйте свои комментарии там. Но можно и тут.
photo

Твитты за сегодня

  • 09:38 Всем взаимно-доброго утра! @lajbo4ka @event0077 @omally13 @Stase4ka @Kogenta @Lassska @kINder_kaluga #
  • 13:14 Когда уже наконец будет 3GS? #
  • 13:21 Надо пройтись по following/followers. Давно откладываю уже #
  • 14:19 Завтра надо в институт вести лабораторки. Ох уж эта аспирантура #
  • 14:26 У нас тут вертолет в 200м от окна садится! #
  • 14:27 Вертолет так и не сел, но летает рядом. Звук довольно громкий) #
  • 14:33 Что-то меня не прет есть вареный рис в сухомятку! Нужен как минимум соус! #
  • 14:52 Бесплатная раздача магнитов от @prostoprint с twitter-ником! Как его получиться кстати? Москва :) #
  • 15:14 Пролистал своих фоллоуверов. Их число уменьшилось примерно на 15% #
  • 16:33 Скоро иду в качалку, уже практически соскучился! #
  • 16:39 Купил своей зайке 750мл бутылку Теди. Она его любит :) #
  • 16:41 Пока писал смску в твиттер, проехал свою станцию метро :( #
  • 16:53 Со мной в вагоне метро едет черный негр в черном костюме, черных очках, черных ботинках и с белыми наушниками apple :)) #
  • 17:47 Уффф, жарко. Сегодня пробежал 5 кругов за 9.33 #
  • 20:31 Интересно - что нового сегодня от #apple!? #
  • 21:02 Читаю презентацию #apple на live.deepapple.com! Уже началось! #
  • 21:08 #apple наконец-то объявили прошивку 3.1 для #iPhone #
  • 21:10 Сейчас наверняка тег #Apple войдет в Trending Topics! #
  • 21:56 RT @ArcKain: качественные фоты с apple транслейшен theappleblog.com/live/ #
  • 22:10 Чего давно не хватало в айподах - так это радио. Молодцы #
photo

Твитты за сегодня

  • 12:12 Сегодня поздно приехал на работу, успел постоять в пробках, покататься на метро и побывать в сбербанке. Привет! #
  • 12:41 У кого-нибудь есть игра ресторатор на вконтакте? :) #
  • 13:18 Сегодня еще не пятница? #