3384d16261dc211bbd607908f47069cb Perl+Linux. Заметка первая (Удобный Paste bin).

Что это ?

Это первая заметка из цикла который я планирую продолжать писать очень долго.
Заметки буду короткие, но информативные и при этом каждая будет направлена на решение какой то практичной задачи.
И так первая заметка будет посвящена тому как мне захотелось постить код на PasteBin сервис, и как я это решил реализовать.

Зачем и почему ?

Захотелось удобно постить код на веб сервисы прямо из IDE.
Так как очень часто обсуждая код с друзьями и знакомыми, хочется похвастать им каким то кусочком кода и в такой момент эта функция была бы очень даже к стати.
Вероятно вы хотели бы задать какой то из следующих вопросов:
- Но как такое реализовать ? Писать плагин для IDE ?
- Но как быть если я использую разные IDE а иметь такой функционал хотелось бы во всех IDE ?
- Писать плагин для каждой IDE? Это ведь не рационально!
А вот и ответы на вопросы которые могли тривожить вашу душу :
- Нет у меня нашлось другое интересное решение!
- Исходя из того что я не решил писать это решение в виде плагина к IDE, то єта проблема отпала сама собой.
- А мы так и не будем делать, мы сделаем крос IDE’шное решение =)

Как это будет работать ?

Взаимодействие с пользователем.
Думаю вы в курсе что *NIX системам присуща возможность запуска команд терминала при помощи нажатия комбинаций клавиш или при помощи кнопок на панели иксов.
Так как я использую Gnome то и действия которые я опишу будут происходить именно в этой графической среде.
И так что то я отклонился от основной темы =)
И так из выше изложенного мы понимаем что мы можем запустить любую CLI программу.
Таким образом мы и будем запускать свою программу которая будет отправлять наш код.

Получаем код который нужно отправить.
Ещё мы знаем что у UNIX подобных ОС есть буфер обмена иксов, в который попадает всё что было выделено.
И получить доступ к этому буферу мы можем при помощи программы xclip,а именно командой :

1
xclip -hxclip -selection primary -o

Из этого мы понимаем что можем легко получить в нашу программу в данный момент выделений текст.
Что же, будем использовать эту возможность.
А именно, для отправки кода на сервис пользователю нужно будет выделить нужный ему код и запустить программу одним из способов описаных в пункте «Взаимодействие с пользователем«.

Вернём результат.
Для возвращения результата будем использовать опять же буфер обмена, только на этот раз уже другой, тот который будет задействован при нажатии кнопок Ctrl+V.
Этот буфер можно наполнить при помощи той же утилиты xclip при помощи команды :

1
xclip -selection clipboard -i

Оповестим пользователя.
Для оповещения пользователя будем использовать программу notify-send для того чтобы вывести уведомление этой программой нужо выполнить такую команду в терминале:

1
notify-send -i "путь к иконке сообщения" "Заголовок" "Сообщение"

А вот и код!

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
#!/usr/bin/perl -w

### Подключаем нужные либы
use LWP::UserAgent; # Обьект браузера
use URI::Escape; # Для кодирования кода
use strict; # Ужесточение синтаксиса, для избежания "мифичесских" ошибок
###

###
my $tipe = 'perl'; # Язык кода
my $poster = 'SHok';# Ник владельца кода
###

# Получаем код из буфера X
my $file = `xclip -hxclip -selection primary -o`;
# Создаём новый обьект браузера
my $ua = LWP::UserAgent->new or die "[$!]\n";
$ua->timeout(20) or die "[$!]\n";
$ua->agent('Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.13) Gecko/20101206 Ubuntu/10.14 (lucid) Firefox/3.6.13') or die "[$!]\n";

# Составляем запрос
my $req = HTTP::Request->new(POST=>'http://pastebin.ubuntu.com/') or die "[$!]\n";
$req->content_type('application/x-www-form-urlencoded') or die "[$!]\n";

# Заполняем параметры, имя пользователя, язык, и сам код закодированый в urlencode
$req->content('poster='.$poster.'&syntax='.$tipe.'&content='.uri_escape($file)) or die "[$!]\n";
# Отправляем запрос и получаем ответ
my $page = $ua->request($req)->as_string or die "[$!]\n";
# Парсим линк на код
my ($link) = ($page) =~ /Location: (http:\/\/pastebin\.ubuntu\.com\/\d+\/)/i;
# Выводим уведомление
system('notify-send -i /usr/share/icons/ubuntu.ico "Paste bin" "Code posted: '.$link.'"');
# Отправляем линк на код в буфер обмена (основной)
system('echo "'.$link.'"|xclip -selection clipboard -i');

И сразу прошу прощения за мой русский.

tt twitter big4 Perl+Linux. Заметка первая (Удобный Paste bin). tt digg big4 Perl+Linux. Заметка первая (Удобный Paste bin). tt facebook big4 Perl+Linux. Заметка первая (Удобный Paste bin). tt gmail big4 Perl+Linux. Заметка первая (Удобный Paste bin). tt myspace big4 Perl+Linux. Заметка первая (Удобный Paste bin). tt reddit big4 Perl+Linux. Заметка первая (Удобный Paste bin).

Оставить комментарий

CAPTCHA изображение
Обновить изображение
*

RSS-подписка NIG Twitter-подписка NIG

Метки
Друзья
Блог линуксоида Программы для диагностики компьютера
Супер Pixel
Убивалка флешаБэкконект шелл. Часть вторая.Бэкконект шелл. Начало.НАМ для деления чиселПростая арифметикаПередача файлов. Часть третья. Клиент.Dll injectionСканер портовКодировка текста в BMPРухнул на два дняПередача файлов. Часть вторая. Сервер.Поворот и BMPCRC32 суммаBMP форматфайловые вирусыассемблер, строкиАссемблер и матрицапримеры ассемблерМногопоточное программированиеАрхитектура клиент — серверРаздача ICQПишем шуткупишем паукаПривет от ДжеймсаОбход firewallЗагрузка картинок на Gyazo, прямо из ThunarКейлоггер 3Плюшки в контекстном меню Thunarc по сетиКейлоггер 2КейлоггерСкачать Ассемблер!VirusCheckerОтморозки мешают жить ?! Не проблемма !Cкрипты для взлома аккаунтов QIPWinAPI. Работа с файлами. Часть третья. ЧтениеDlink exploitБрут сайта etxt.ruКрасивая раскладка клавиатуры в GnomeМои безделушки на PerlКак запускать Perl скрипты под WindowsБрутфорс партнёрки ZipCoinПарсер upwap.ruИзменения в блогеЧудо ЗаливалкаСкрипт для загрузки файлов на Zalil.ruЯндекс «чоткий» поисковик!WinAPI. Работа с файлами. Часть вторая. ЗаписьWinAPI. Работа с файлами. Часть первая. ПоискПолучение MD5 хеша средствами C++Что нам стоить letitfile.com забрутить?WarCraft III запуск под LinuxЭнтропия файлаWinsock и C++. Мини прокси. Часть |\\/. Завершающая.Перепилил чекер для 4gameЧекер акаунтов YoupornCMailSend v 1.1. Отправка почы без проблемСлучайные числаWinsock и C++. Часть |||. smtp монстр.Брутфорс LetitFile.comИспользование X-Forwarded-For, для обмана веб-сервера, подмена IP подручными средствамиДело было вечером, делать было нечего…Мысли о аудио сервереПарсер ников из твиттераКонец школоло…Perl+Linux. Заметка первая (Удобный Paste bin).Бэкконект шелл.E-MAIL + winsocket + Cpp. Сложно?winsock и C++. Часть ||. Атака клоунов.C++ резолвинг адресаPerl, анализ HTML кода и определение CMSМатематика в C++winsock и C++