Посты с тегом script
IT.Tux.Droid 05.04.2011 20:12

СкриптыProstoScript для ProstoPleer’a.

prostoscript.py – умеет создавать плейлисты и/или полностью скачивать музыку из Ваших плейлистов на ProstoPleer’е и топа радиостанций ProstoPleer’а.
  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
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
# coding: utf-8

######################################################
#                                                    #
#         ProstoScript для ProstoPleer'a =)          #
#   Code by IT.Tux.Droid <http://it-tux-droid.ru/>   #
#                                                    #
######################################################

import pycurl, StringIO, re, os, progressbar
from optparse import OptionParser

data = StringIO.StringIO()
curl = pycurl.Curl()
curl.setopt(pycurl.WRITEFUNCTION, data.write)

parser = OptionParser()
parser.add_option('-m', '--mode', dest='mode', metavar='MODE', default='0',
                  help='select mode: 0 - create playlist, 1 - download songs, 2 - create playlist and download songs')
parser.add_option('-u', '--url', dest='url', metavar='URL',
                  help='url to playlist or radio: http://prostopleer.com/#/top/msk/nasheradio')
(options, args) = parser.parse_args()

def progress(download_t, download_d, upload_t, upload_d):
        if (download_t != 0) and (download_d != download_t):
                bar.update((int(download_d)*100)/int(download_t))

def error(text):
        z = len(text.decode('utf-8'))
        print ' ????????????????'+'?'*z
        print ' ?       '+text+'       ?'
        print ' ????????????????'+'?'*z

def download_mp3(folder, song, url):
        global bar
        print '? '+song
        if not os.path.exists(folder):
                os.makedirs(folder)
        if not os.path.exists(folder+'/'+song+'.mp3'):
                bar = progressbar.ProgressBar(maxval=100, widgets=<'?   ?', progressbar.Bar(left='<', marker='=', right='>')>).start()
                data.truncate(0)
                curl.setopt(pycurl.URL, 'http://prostopleer.com/download/'+url)
                curl.setopt(curl.PROGRESSFUNCTION, progress)
                curl.setopt(curl.NOPROGRESS, 0)
                try:
                        curl.perform()
                except:
                        print '?   ?<connection error="error">'
                        return False
                bar.finish()
                mp3 = open(folder+'/'+song+'.mp3', 'w')
                mp3.write(data.getvalue())
                mp3.close()
        else:
                print '?   ?<you already="already" have="have" it="it">'

# Create .m3u playlist and/or download songs from your playlist.
# Example: "playlist('list346790Ntwn', 2)".
def playlist(p, m):
        data.truncate(0)
        curl.setopt(pycurl.URL,'http://prostopleer.com/'+p)
        curl.setopt(curl.NOPROGRESS, 1)
        try:
                curl.perform()
        except:
                error('Connection error!')
                return False

        list_name = re.findall("class=\"results\"&gt; &lt;h2&gt;(<^&lt;>*)&lt;/h2&gt;", data.getvalue())<0><20:-2>
        musics = re.findall("file_id=\"(<^\">*)\" track_id=\"(<^\">*)\" singer=\"(<^\">*)\" song=\"(<^\">*)\" link", data.getvalue())

        z = len(list_name.decode('utf-8'))

        if m in <0, 2>:
                m3u = open('playlist <'+list_name+'>.m3u', 'w')
                for music in musics:
                        m3u.write('#EXTINF: 0, '+music<2>+' - '+music<3>+'\nhttp://prostopleer.com/download/'+music<0>+'\n')
                m3u.close()
                print ' ?????????????????????????????????????????????????????'+'?'*z+'?'
                print ' ? Playlist from playlist ('+list_name+') was successfully created ?'
                print ' ?????????????????????????????????????????????????????'+'?'*z+'?'

        if m in <1, 2>:
                print ' ?????????????????????????????????????????????????????'+'?'*z+'?'
                print '??     Start download songs from your playlist ('+list_name+')     ?'
                print '??????????????????????????????????????????????????????'+'?'*z+'?'
                for music in musics:
                        download_mp3('playlist <'+list_name+'>', music<2>+' - '+music<3>, music<0>)
                print '??????????????????????????????????????????????????????'+'?'*z+'?'
                print '?? Songs from playlist ('+list_name+') was successfully downloaded ?'
                print ' ?????????????????????????????????????????????????????'+'?'*z+'?'

# Create .m3u playlist and/or download songs from radio.
# Example: "radio('top/msk/nasheradio', 2)".
def radio(r, f):
        data.truncate(0)
        curl.setopt(pycurl.URL,'http://prostopleer.com/'+r)
        curl.setopt(curl.NOPROGRESS, 1)
        try:
                curl.perform()
        except:
                error('Connection error!')
                return False

        radio_name = re.findall("radio-name\"&gt;(<^&lt;>*)&lt;/span&gt;", data.getvalue())<0>
        musics = re.findall("file_id=\"(<^\">*)\" singer=\"(<^\">*)\" song=\"(<^\">*)\" link", data.getvalue())

        z = len(radio_name.decode('utf-8'))

        if f in <0, 2>:
                m3u = open('radio <'+radio_name+'>.m3u', 'w')
                for music in musics:
                        m3u.write('#EXTINF: 0, '+music<1>+' - '+music<2>+'\nhttp://prostopleer.com/download/'+music<0>+'\n')
                m3u.close()
                print ' ?????????????????????????????????????????????????????'+'?'*z+'?'
                print ' ?  Playlist from radio ('+radio_name+') was successfully created   ?'
                print ' ?????????????????????????????????????????????????????'+'?'*z+'?'

        if f in <1, 2>:
                print ' ?????????????????????????????????????????????????????'+'?'*z+'?'
                print '??         Start download songs from radio ('+radio_name+')         ?'
                print '??????????????????????????????????????????????????????'+'?'*z+'?'
                for music in musics:
                        download_mp3('radio <'+radio_name+'>', music<1>+' - '+music<2>, music<0>)
                print '??????????????????????????????????????????????????????'+'?'*z+'?'
                print '??  Songs from radio ('+radio_name+') was successfully downloaded   ?'
                print ' ?????????????????????????????????????????????????????'+'?'*z+'?'

if options.mode in <'0', '1', '2'>:
        if options.url != None:
                u = re.findall('(list.*)', options.url)
                if u:
                        playlist(u<0>, int(options.mode))
                else:
                        u = re.findall('(top/.*)', options.url)
                        if u:
                                radio(u<0>, int(options.mode))
                        else:
                                error('Error URL!')
        else:
                error('Enter URL!')
else:
        error('Error MODE!')

curl.close()
</you></connection>

Зависимости: python, python-pycurl, python-progressbar.
$ sudo apt-get install python python-pycurl python-progressbar

PS: буду рад предложениям и замечаниям ;)
PPS: нет, 60 рублей в месяц совсем не много, но скрипт я все-же написал =)
Полностью.
+ 2 -
1
Sugar 30.06.2010 12:13

Linux Network AdministrationОткрытие портов на некоторое время

Доброго времени суток, welinux.ru
Работаю сисадмином в некоторой конторе, есть сетка, есть прокси-сервер, он же шлюз, на основе ОС GNU/Linux.
На сервачке всё как положено - весь инет идет через прокси (squid), файрвол настроен, все политики по умолчанию установлены в drop, нескольким машинам открыты нужные им порты. Всё вроде хорошо, маршрутизация настроена, пакетики бегают, юзеры довольны, но есть одно но...
Полностью.
+ 8 -
31
26.06.2010 09:44

cppmmНебольшой скриптик для стягивания музыки.

Нашёл тут сайт в местной локалке, где имеется довольно объёмная коллекция музыки. Но, скачивать можно только по одной песне. В общем, это не интересно. Полчаса времени и я родил скромный скриптик. Предупреждаю сразу, написан он на скорую руку и заточен под один определённый сайт(поэтому и пост у себя в персональном). Скрипт принимает на входе url страницы со списком альбомов группы, а на выходе выдаёт все песни этой группы, аккуратно разложенные по папочкам с названиями альбомов.
Суть подхода - качаем страницу со списком альбомов, потом парсим её парой костылей с конвеерами и скармливаем всё это wget'у.
Полностью.
+ 1 -
3
kirpichtion 15.05.2010 12:48

СкриптыСкрипт бэкапа (bash)

Публикую скрипт, которым я сохраняю свои проекты в несколько хранилищ одновременно.
Полностью.
+ 0 -
10
s2h 30.03.2010 17:56

СкриптыОсновы применения Python в администрировании Linux

Небольшая статья от IBM'овцев о том как применять Питон в системном администрировании Linux. Отличия от баша, работа со скриптами.
Полностью.
+ 2 -
6
cppmm 18.03.2010 13:21

СкриптыДискриминация по национальному признаку или баним страны.

Так получилось, что понадобилось прикрыть доступ к серверу из некоторых стран. Понимаю, что кровавая гебня и всё такое, но задача есть, надо сделать.
Вот здесь находим архивчик с базой IP-адресов и их национальной принадлежностью. Далее за нас работает небольшой скрипт. Для работы скрипта понадобится дополнительно установить замечательную утилиту ipcalc.
Полностью.
+ 6 -
17
afiskon 25.02.2010 20:46

СкриптыОсновы программирования на Perl (часть 2)

Ну вот дошли руки написать продолжение к посту Основы программирования на Perl. В этой части речь пойдет об условных операторах и циклах.
Полностью.
+ 9 -
22
afiskon 15.02.2010 21:07

СкриптыМоя статья: Основы программирования на Perl

По просьбе нескольких своих друзей я написал пост о программировании на Perl. Возможно, кого-то эта тема интересует, в этом случае прошу ознакомиться. Интересует, насколько легко, по-вашему, воспринимается статья, остались ли после прочтения какие-то не совсем ясные моменты и так далее. В общем хотелось бы получить пару объективных отзывов.

Статья под катом
Полностью.
+ 10 -
33
xT 12.02.2010 20:44

СкриптыУведомления о балансе

Сначала думал очередной раз не присоединиться к Неделе Чего-Либо на Вилинуксе, так как идеи не было, но буквально в конце рабочего дня она нашлась
: )

Не нашел в нигде в Личном Кабинете своего провайдера такой опции, как получение на почту уведомлений о наличии средств на балансе.
Поэтому решил написать небольшой костыль, чтобы отправлять мне каждый день письма и смс-ки со моим балансом.
Полностью.
+ 9 -
7
galaxyman 06.02.2010 20:53

СкриптыСкрипт для пакетного переименования (транслитерации) файлов

Скрипт для пакетного переименования (транслитерации) файлов и удаления пробелов в названии.
Назначение скрипта - переименовать рекурсивно все файлы, начиная с текущей папки, включая вложенные директории. При переименовании буквы русского алфавита заменяются по правилам транслитерации на английские, пробелы заменяются символом "_", "_-_" заменяются на "-". Правила конвертирования легко меняются правкой соответствующей строки скрипта.

Полностью.
+ 3 -
15
1 2 3 4