Посты с тегом python
10.05.2011 21:57

BkmzЗагружаем скриншоты на фотохостинг

Предлагаю вашему вниманию свою реализацию для параноиков, скрипта, который делает скриншоты и сразу же их загружает на фотохостинг. По определенным причинам, я не хотел пользоваться общедостпными сервисами, и решил выйти из положения, написанием парсера для OpenSource движка: Chevereto. Пожелания\баги\замечания приветствуются.
Исходники здесь:
https://bitbucket.org/bkmz/img_upload
Полностью.
+ 0 -
3
nvbn 10.05.2011 21:57

PythonРазработка графических приложений для Android или приложение Welinux

qr code
Прошла всего неделя с момента покупки htc desire, а мне уже захотелось под него что-нибудь написать. А так как java я не знаю, то пришлось извращаться и писать на python. Забегая вперёд, для тех кого интересует только приложение Welinux - qr код справа.

Приложение может потребовать Python For Android, без него пока не тестировалось.
Полностью.
+ 13 -
17
aka_Jack 04.05.2011 18:31

PythonУстановка модуля cx_Oracle для Python

Однажды понадобилось установить cx_Oracle на Ubuntu 10.04.
В репозитории я пакет не нашел, статьи с готовой инструкцией по установке тоже, поэтому после небольшой компиляции советов написал себе howto, который может будет кому-то полезен
Полностью.
+ 9 -
3
16.04.2011 14:00

RANUXВидео уроки python для начинающих

Всем привет!
Приглашаю всех желающих изучать Python посетить мой канал http://www.youtube.com/user/httpbots посвященный программированию на Python.
Новые уроки стараюсь записывать и выкладывать каждые выходные. Буду рад комментариям и предложениям!
+ 6 -
19
jungo 10.04.2011 23:49

СкриптыПолучаем данные со странички дропбокс с помощью python

Я использую xmonad без панелей/треев и тому подобных плюшек, которые лично мне не нужны для продуктивной работы. Как то раз понадобилось мониторить события, которые происходят на дропбоксе, в т.ч. в расшаренной с другими пользователями директории. Поэтому решил написать скрипт, который получал бы все произошедшие события и отрисовывал их на рабочем столе, прямо на обоине.

Вообще рабочий стол я вижу редко, поэтому цвет и содержимое обоев для меня не важно, соответственно есть две возможности:
1) либо создавать обоину монотонного цвета (например, под цвет темы, у меня Zenburn)
2) либо использовать любое готовое изображение
Полностью.
+ 5 -
5
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
27.03.2011 21:40

ZendОпрос пользователей GIMP

В моем GIMP-е, в меню "Фильтры" есть пункт "Python-Fu" 81
В моем GIMP-е, в меню "Фильтры" нет никакого "Python-Fu" 13
+ 2 -
11
KrasniyRus 26.03.2011 14:57

Есть вопрос!Vi omni completion

Давненько хочется слезть с больших IDE, на любимый Vi, но мешает то, что я никак не могу понять как работает автокомплит.

Доки курил, но ясности это как-то не добавило, а вопросы такие:
1. Можно ли сделать чтобы user defined классы в проекте (скажем через плагин project) подхватывались "на лету"?
2. Что такое omni completion и с чем его есть для Python? (доки курил, но плохо раскуриваются)

Принимаются ссылки на годные маны (разжевали для новичка и положили в мозг) или рабочие конфиги vi (не сильно навороченные), с использования которых можно начать, ну или может кто возьмет на себя титанический труд по объяснению на пальцах

P.S.: В гугле не забанили, просто все что нахожу это для тех кто вкурил и уже пользуется, а вот информации о том как пользоваться начать, я так нигде и не смог найти.

Заранее всем спасибо!
+ 3 -
10
x0x01 25.03.2011 16:59

СкриптыКачаем обновленные торренты c rutracker.org

Как известно, многие раздачи ведутся путем добавления новых файлов к уже существующим, у rutracker.org нет прямого RSS на обновленный torrent файл.
Данный скрипт исправляет этот недостаток. Обходя ссылки из файла urls.lst, проверяет изменились ли размеры torrent файлов, в случае изменений - сохраняет обновленный и запоминает размер в last.lst

Не забудьте перед запуском создать urls.lst и пустой last.lst в каталоге со скриптом.

Собственно код:

#!/usr/bin/env python2
# -*- coding: UTF-8 -*-
# created by x0x01 (aka.x0x01[AT]gmail[dot]com)

import urllib, urllib2, cookielib
from string import strip

LOGIN = 'username'
PASS = 'password'
# путь для сохранения torrent файла
OUT_DIR = './'
#OUT_DIR = '/tmp/gettor/'

# формирование кук
post_params = urllib.urlencode({
'login_username' : LOGIN,
'login_password' : PASS,
'login' : '%C2%F5%EE%E4'
})

# инит обработчика кук
cookie = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))
urllib2.install_opener(opener)

# авторизация + сессия с куками
web_obj = opener.open('http://login.rutracker.org/forum/login.php', post_params)
data = web_obj.read()

try:
# читаем файл со ссылками, формируем список
fl_url_list = open('urls.lst', 'r')
url_arr = fl_url_list.readlines()
fl_url_list.close()
# чтение файла "размеров", формируем список
fl_dta_list = open('last.lst', 'r')
dta_arr = fl_dta_list.readlines()
fl_dta_list.close()
except IOError:
print 'err'
dta_arr = []


# открытие на запись для новых "размеров" в last.lst
fl_dta_list = open('last.lst', 'w')

# из списка "размеров" формируем словарь ID:SIZE
dta_dic = {}
for curr in dta_arr:
# отрезаем переносы строк
curr = strip(curr)
# делим строку по пробелу и создаем словарь
dta_dic[str.split(curr)[0]] = str.split(curr)[1]

# сохранение torrent файла
def dw_torrent_f(b_data, f_name):
f = open(OUT_DIR+f_name+'.torrent', 'w')
f.write(b_data)
f.close()

# обработка ссылок
for thread_url in url_arr:
# отрезаем переносы строк
thread_url = strip(thread_url)
# делим ссылку на 2 части (получение id форума)
topic_id = str.split(thread_url,'=')[1]
dl_torrent_url = 'http://dl.rutracker.org/forum/dl.php?t='+topic_id
# получение torrent файла по ссылке
web_obj = opener.open(dl_torrent_url, post_params)
data = web_obj.read()
# сравнение размеров полученного файла и в last.lst
try:
if len(data) <> int(dta_dic[topic_id]):
# этот обновился, сохраняем
print '[^]', thread_url
dw_torrent_f(data, topic_id)
except (IndexError, KeyError):
# этот новый, сохраняем
print '[+]', thread_url
dw_torrent_f(data, topic_id)
#print 'UPD:', dl_torrent_url, 'new:', len(data), 'old:', m_dic[topic_id]
# пишем в last.lst новые значения id и размер
fl_dta_list.write(str(topic_id)+' '+str(len(data))+'\n')

# закрытие файла
fl_dta_list.close()


кусочек моего urls.lst

http://rutracker.org/forum/viewtopic.php?t=3414220
http://rutracker.org/forum/viewtopic.php?t=3216842
http://rutracker.org/forum/viewtopic.php?t=3157454

Полностью.
+ 0 -
16
dimzon 05.03.2011 22:46

СкриптыСкрипт, собирающий видеоколлекцию с разных винтов и группирующий по названию / году выхода

Я у себя в квартире активно использую сетевые медиаплееры класса ASUS O!Play и его собратьев от IconBit. Эти плееры по NFS монтируют шару, расположенную на NAS. К сожалению интерфейс этих плееров очень примитивен - все что может делать плеер это ходить по папкам шары (сортировка только по наименованию, поиска нет). Кроме того у меня много винтов (видны как отдельные папки в шаре) и поиск конкретного фильма может быть весьма нетривиален. Посему я написал данный скрипт. Что он делает:
Сканирует все указанные в настройках папки (хранилища фильмов) и собирает при помощи символических ссылок все фильмы в одну папку
Создает папки по первой букве из названия, складывает все фильмы туда (т.е. например папочка "А" и в ней все фильмы на букву "А")
Создаёт папки по году выхода (используется регулярное выражение для поиска "года" в имени папки), складывает фильмы туда (т.е. например папочка "2010" и в ней все фильмы, вышедшие в 2010 году)
Находит дубликаты (по полному совпадению наименования папки с фильмом) и записывает их в специальный файл

Полностью.
+ 4 -
4
1 2 3 4 5 6 7 8 9 10