Program telewizyjny i Zend_Gdata

Od dłuższego czasu denerwują mnie internetowe programy telewizyjne. Twórcy – zazwyczaj duże portale, bo tylko takie stać na wykupienie programów od firm je zbierających – totalnie nie znają się na usability (bardzo popularne słowo ;) ). Nie dość że umieszczają na jednej stronie jak najmniejszą liczbę kanałów, to jeszcze serwują użytkownikom masę kolorowych banerów i wyskakujących popupów. Totalna frustracja.

Co robi programista w takim przypadku? - tworzy własną lepsza aplikacje. Podobnie się stało w moim przypadku. Zbudowałem sobie na własne potrzeby całkowicie minimalistyczny program. Sama godzina i tytuł. Żeby lepiej się czytało ustaliłem odpowiednie kolory tła dla programów które się już skoczyły, trwają oraz dopiero się zaczną za jakiś czas.


(Plusiki przy tytułach, odpowiadają za AJAXową funkcje dodawania programu do kalendarza, o czym za chwilę.)

Do tej pory, gdy zobaczyłem jakiś interesujący mnie program, żeby o nim nie zapomnieć otwierałem Google Calendar i dodawałem go do odpowiedniego kalendarza. Finałowo rozwiązanie bardzo dobre, tyle że takie dodawanie jest nużące i trochę trwa. Co robi programista w takim przypadku? ;) – mając już własną aplikacje, dodaje do niej odpowiednią funkcjonalność.

Google udostępnia API dzięki któremu można obsługiwać wszystkie jego aplikacje. Wgryzienie się w jego obsługę mogło by zająć trochę czasu. Na szczęście mamy do dyspozycji Zend Frameworka z komponentem Zend_Gdata. W tym momencie jest to już banalnie proste.

Poniżej przedstawiam moją akcje odpowiedzialną za dodawanie wydarzenia do kalendarza.

public function addAction()
	{
		if($this->getRequest()->isXmlHttpRequest()) {
			$this->_helper->layout->disableLayout();
			$this->_helper->viewRenderer->setNoRender();
		} else {
			$this->_helper->redirector->gotoUrlAndExit('/');
		}
		
		$config = Zend_Registry::get('config')->google->calendar;
		
		$service = Zend_Gdata_Calendar::AUTH_SERVICE_NAME;
		$client = Zend_Gdata_ClientLogin::getHttpClient($config->username, $config->password, $service);
		$calendar = new Zend_Gdata_Calendar($client);
		
		$event = $calendar->newEventEntry();
		$title = $this->getRequest()->getPost('name').' ('.$this->getRequest()->getPost('chanelName').')';
		$event->title = $calendar->newTitle($title);
		
		$startDate = date('Y-m-d', $this->getRequest()->getPost('startTime')); // format "2008-03-22";
		$startTime = date('H:i', $this->getRequest()->getPost('startTime')); // format "14:00";
		
		if(!$this->getRequest()->getPost('endTime')) { // hack na ostatni program
			$endDate =  date('Y-m-d', $this->getRequest()->getPost('startTime')+3600);
			$endTime = date('H:i', $this->getRequest()->getPost('startTime')+3600);
		} else {
			$endDate =  date('Y-m-d', $this->getRequest()->getPost('endTime'));
			$endTime = date('H:i', $this->getRequest()->getPost('endTime'));
		}

		$when = $calendar->newWhen();
		$when->startTime = "{$startDate}T{$startTime}:00.000";
		$when->endTime = "{$endDate}T{$endTime}:00.000";
		
		$reminder = $calendar->newReminder();
		$reminder->method = $config->reminder->method;
		$reminder->minutes = $config->reminder->minutes;	
		$when->reminders = array($reminder);
		
		$event->when = array($when);
		
		try {
			$newEvent = $calendar->insertEvent($event, 'http://www.google.com/calendar/feeds/'.$config->id.'/private/full');
		} catch (Zend_Gdata_App_Exception $e) {
    		echo "Error: " . $e->getResponse();
		}
		
		echo 'Progrma: "'.$this->getRequest()->getPost('name').'" dodany do kalendarza.';
	}



Cały kod chyba nie wymaga komentarzy. Metody są całkowicie czytelne i proste w interpretacji. Cały ich opis można znaleźć w manualu. Jedynie na uwagę zasługuje drugi parametr metody insertEvent(). Aby dodać wydarzenie do konkretnego kalendarza należy w nim podać następujący łańcuch:
'http://www.google.com/calendar/feeds/'.$config->id.'/private/full'

Gdzie $config->id to identyfikator który można znaleźć w ustawieniach szczegółów danego kalendarza, w dziale adres kalendarza, po prawej stronie. Może wyglądać mniej więcej tak: hash@group.calendar.google.com Nad znalezieniem tej funkcjonalności spędziłem trochę czasu więc może komuś będzie łatwiej.

Tak oto mam porządny program z dodawaniem programów do kalendarza oraz darmowe powiadamianie SMSowe.

5 Responses to “Program telewizyjny i Zend_Gdata”

  1. A program jak pobierasz?
    Z witryny jakiegoś portalu cURLem, czy może inaczej?

    ciekawość... :)

  2. Dokładnie tak. :) Nie widzę innej możliwości :P Nie będę podawał jaki to wortal żeby nie było, chodź i tak aplikacja stoi tylko na localu (:

Leave a Reply