Python: Актуалната песен в Clipboard

Автор Владимир Колев | Вариант за отпечатване Вариант за отпечатване

1 Star2 Stars3 Stars4 Stars5 Stars (1гласа, средно: 5,00 от общо 5)
Loading ... Loading ...
 

За този урок ще са ви необходими елементарни познания по програмиране с Python, и разбиране на командите в Linux терминала. Урокът може лесно да бъде пренаписан и на други езици: perl, bash, и т.н. Ето и какво ще прави нашият малък скрипт:

  1. Ще проверим дали плейърът, който използваме е включен
  2. След като е включен ще използваме команда, която да изведе информация за свирещата в моемнта песен, и нашият скрипт ще я прочете
  3. Скрипта ще форматира прочетената информация, за да я подреди във формата „Изпълнител – Заглавие“
  4. След което ще използваме gtk библиотеката, за да копираме песента в clipboard
  5. Ще разширим скрипта, за да издава приятени съобщения, когато е копирана песен

Преди да започнем ще трябва да се уверим, че системата ни е готова, т.е. че разполагаме с необходимите библиотеки. За целта са ни необходими:

  • python >=2.5
  • python-notify
  • python-gtk2

След като сте инсталирали необходимите пакети е време да се захванем за работа:

Скелет на скрипта:

Ще започнем със създаването на скелет за нашият скрипт, който в последствие ще разширим. Първоначално ще създадем метод cur_song(), който ще проверява и събира информация за свирещата песен. Причината да правиме това, е за да можем да използваме скрипта и в други наши програми. След което ще инициализираме метода и ще го изпълним при стартиране на програмата с if __name__ = „__main__“: , където ще инициализираме и метода за записване в clipboard-а.

#!/usr/bin/env python

import os

def cur_song():

	return song

if __name__ == "__main__":
	import pygtk
	import gtk
	print cur_song()

Така GTK ни предлага един много елементарен инструмент, който ще ни помогне за копиране на песента в Clipboard. За целта първо трябва да създадеме променилва clipboard, която да приеме метода за отваряне на clipboard, след което ще зададем променливата да приеме стойност от нашия метод cur_song(), и накрая ще запишеме промяната – три реда по-близко до целта ;) :

	clipboard = gtk.clipboard_get()
	clipboard.set_text(cur_song())
	clipboard.store()

Вземане на информацията от плейъра

За да вземем информацията от плейъра, първо трябва да определим, кой плейър ще използваме. Нека за примера вземем Rhythmbox, ще видите че метода е приложим и за други аудио плейъри като:  exaile, banschee, quodlibet, listen, mocp.

Първо да разберем как всъщност функционира самия метод:

1. Много добре знаем, че всяка стартирана програма създава процес и това кои процеси в работят в момента на компютъра можем да проверим с командата ps -A, и за да проверим за точно определена програма можем да използваме командатата grep <име_на_програмата>. Като резултат получаваме командния ред: ps -A | grep rhythmbox

2. От нашият скрипт много лесно можем да добавим изпълнението на командата посредством метода exec, но така няма да можем да прочетем изхода от командата. За целта ще използваме библиотеката os, която съдържа и метода popen, с който да прочетем изхода от изпълнената команда.

3. Към Rhythmbox има приложение с името rhythmbox-client, което ни предосравя достъп до Rhythmbox от командния ред. Добавяйки параметъра –print-playing получаваме точно това, което ни трябва – свирещата в момента песен.

След като разполагаме с горните знания вече няма да ни бъде никак трудно да ги приложиме в нашия метод cur_song():

	# Проверяваме дали rhythmbox е включен
	if "rhythmbox" in os.popen('ps -A | grep rhythmbox').readline():
		# Прочитаме свирещата в момента песен и премахваме новия ред от изхода, за да получиме само един ред
		song = os.popen('rhythmbox-client --print-playing').readline().replace('\n', '')
	else:
		return "No song playing"
	# Тъй като това е метод - връщаме съдържанието на променливата
	return song

И това е като цяло скрипта в няколко реда. При изпълнението му няма да се случи абсолютно нищо – т.е. нищо няма да видите, но ако отворите текстов редактор и изберете опцията paste, ще получите свирещата песен в момета :)

Разширяване на скрипта

playcopyЗа да разширим нашият скрипт и да знаеме, дали работи правилно ще използваме библиотеката notify, която ни предоставя възможност да пращаме съобщения до notify системата на Linux. Преди това обаче, ще си добавиме възможност да включваме и изключваме системата за известия – за целта ще създаден след дефинирането на библиотеките глобална променлива show_notifications = 1. И в зависимост от това, дали стойността е 0 или 1, ще определяме дали известяването е включено или изключено. Първо ще ви покажа кодовия блок, който добавяме към края на скрипта – след clipboard.store():

if show_notifications == 1:
		try:
			import pynotify
			if pynotify.init("playCopy"):
				n = pynotify.Notification("playCopy", "\n%s" % clipboard.wait_for_text(), "audio-volume-medium")
				n.show()
		except:
			print "You don't have pynotify installed!"

Ето и какво се случва. Ако променливата ни show_notifications иа стойност 1, то тогава ще се опитаме да вмъкнеме библиотеката pynotify. Ако не е вмъкната, значи че не е инсталирана. След което следва условието pynotify.init(„playCopy“) – това е много важно, защото без него нашия скрипт няма да работи – това, което прави е да съобщи на notify, че нашия скрипт си има има playCopy, с което да го идентифицира. и след това взимаме съобщението, което последно нашият скрипт е записал в clipboard за да го покажеме n.show().

Можете да изтеглите и пълния скрипт за програмата:

PlayCopy Script (33.37 KB) 66 изтегляния


One Trackback

  1. [...] Да прикачим скрипта към глобална клавишна комбинация (виж Python: Актуалната песен в Clipboard) [...]

Публикувай коментар

Вашият е-мейл никога няма да бъде споделен. Задължителните полета са маркирани с *

*
*