Raksti > Internets > Pastaigas ar Google API

Pastaigas ar Google API

18.10.2009. Pievienot komentāru

Mana pirmā iepazīšanās ar Google Ajax API bija pirms apmēram diviem gadiem, kad man palūdza uztaisīt organizācijas “Vecāki Jelgavai” nakts apgaitu karti. Toreiz pāris dienas ņēmos kā nepieskaitāms un, lai gan rezultāts nebija pilnībā tāds, kā iecerēts, rezultāts tomēr acis priecēja. Tagad nācās aprunāties ar Ajax API kalendāra sakarā.

Kārtējo reizi gan sākšu ar atrunu, ka esmu amatieris un parasti iemācos tikai to, kas tobrīd ir vajadzīgs. To pašu “Vecāki Jelgavai” karti tagad uzreiz tādu otru neuztaisītu.

Lai vai kā – šajā darba nedēļā radās vajadzība (lasi – dzima ideja) darba vietā izmantot kalendāru, kas kalpotu kā pārskatāms plānošanas rīks. Līdz šim bijām aprobežojušies ar paziņojumiem par darbinieku prombūtni, bet vizualizācija prātā bija jau sen. Domāts, darīts.

Sāku ar Joomla! spraudni GCalendar. To izmantojot atliek vien norādīt attēlojamā kalendāra XML un HTML adresi.
Vienīgais niķis, kas var tikt novērots – ja šādā Joomla! tiek izmantoti vairāki spraudņi, kas izmanto Google Ajax API atslēgas (piemēram, RSS lasītājam, kartēm) un tiek izmantota cita funkcionalitāte no Google, tad var rasties problēmas ar atsevišķu komponentu funkcionalitāti – manā gadījumā RSS modulis (kas rāda ziņas no ārējā resursa un atslēga iegūta no viena Google lietotāja) turpināja strādāt, bet kalendārs (kas piesaistīts citam Google lietotājam) tuprināja pieprasīt autetificēties. Problēma, kā nojaušams, tika atrisināta brīdī, kad visas Google funkcijas tika sasaistītas ar vienu lietotāju.

Ja tiek izmantots privātais kalendārs (ne publisks; tāds, kura ieraksti neuzrādās globālās meklēšanas rezultātos), tad ķiebele ir tieši ar html URLi – to atverot parādīts tiek nevis kalendārs, bet gan autorizēšanās lapa. Problēmu sīkak pacentos iztirzāt Google Calendar forumā – pagaidu risinājums ir; jācer, ka tā ir kāda īslaicīga kļūda, kas ar laiku izzudīs (lai gan atsevišķās Google Calendar pamācībās tiek konkrēti norādīts, ka html URL strādās korekti tikai ar publiskajiem kalendāriem; nezinu, kā man līdz šim tas izdevās ar privāto kalendāru…).

Faktiski jau var iztikt arī bez minētā GCalendar spraudņa – ļoti ērts ir arī Google Embeddable Calendar Helper, kas uzdāvinās gatavu html kodu tālākai izmantošanai. Ar to arī pamatfunkcionalitāte būtu nodrošināta.

Tomēr es, kā jau ierasts, centos pastiepties līdz augstākam plauktiņam – pievienot plānotajā kalendāra lapā papildfunkciju – meklēšanu. Uzreiz gan jāsaka, ka Google Calendars gadījumā strādā meklēšana tikai pēc pilna vārda – notikums ar vārdu “Vecrīga” netiek atrasts, ja meklējot ierakstām “Vecrīg”. Sad, but true. Pašu meklēšanas funkciju grūti atrast nebija – pielāgoju to no Google AJAX APIs Playground atrodamās Calendar API – Full Text Queries piemēra. Atlika vien pievienot vienu ievades lauku, pogu un pielabot piemēra funkciju un rezultāts bija gatavs.
Lai vēl mazliet pielabotu, piemērā pievienoju arī dinamiskās <div> izmaiņas (ja neko meklēšanā neatrod, tad atvēlētais lauks saraujas, ja atrod, tad paliek lielāks).

Diemžēl Joomla! vidē kods īsti nestrādāja – meklēšanas rezultāti tika atvērti vēlreiz ielādējot lapu, nevis dinamiski. Anyway, kods tika uztapināts, tāpēc savai turpmākai lietošanai publicēju to te. Cerams, ka kādam citam arī noderēs.
Bai ze vei, onkulis ir izveidojis kalendāru, kurā apskatāmi visi Latvijas interneta publiskie pasākumi. Intereses pēc ir vērts papētīt :)

<!–
copyright (c) 2009 Google inc.

You are free to copy and use this sample.
License can be found here: http://code.google.com/apis/ajaxsearch/faq/#license
–>

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Strict//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml”>
<head>
<meta http-equiv=”content-type” content=”text/html; charset=utf-8″/>
<title>Calendar Data API Sample</title>
<script src=”http://www.google.com/jsapi” type=”text/javascript”></script>
<script type=”text/javascript”>
google.load(“gdata”, “1.x”, { packages : ["calendar"] });
</script>
<script type=”text/javascript”>

function _run(Text, form) {
/*
* Retrieve events with full text query
*/
// Obtain a reference to the ‘content’ div
var content = document.getElementById(‘content’);

// Create the calendar service object
var calendarService =
new google.gdata.calendar.CalendarService(‘com.appspot.interactivesampler’);

// The “public/full” feed is used to retrieve events from the named public
// calendar with full projection.
var feedUri = ‘ ‘; Te ir kalendāra adrese (xml)

// Full text query for this string
var searchText = Text ;

// Create a CalendarEventQuery, and specify that this query is
// applied toward the “private/full” feed
var query = new google.gdata.calendar.CalendarEventQuery(feedUri);

// Set the query with the query text
query.setFullTextQuery(searchText);

// The callback method that will be called when getEventsFeed() returns feed data
var callback = function(root) {

// Obtain the array of mateched CalendarEventEntry
var eventEntries = root.feed.getEntries();

// Output the query we’re using
var html  = ‘<p><strong>Jūs meklējāt:</strong> ‘ + searchText + ‘</p>’;

// If there is matches for the full text query
if (eventEntries.length > 0) {
html += ‘<ul>’;
for (var i = 0; i < eventEntries.length; i++) {
var event = eventEntries[i];
// Print the event title of the matches
html += ‘<li><b><a href=”‘+event.getLink().getHref()+’”>’+ event.getTitle().getText() + ‘</b></a><br />’+event.getContent().getText()+’</li>”;
}
html += ‘</ul>’;
document.getElementById(“content”).style.height = 380+”px”;
} else {
// No match is found for the full text query
html += ‘<p>Nekas netika atrasts!</p>’;
document.getElementById(“content”).style.height = 70+”px”;
}

// Output HTML and clear ‘Loading…’ message
content.innerHTML = html;
};

// Error handler to be invoked when getEventsFeed() produces an error
var handleError = function(error) {
content.innerHTML = ‘<pre>’ + error + ‘</pre>’;
};

// Submit the request using the calendar service object.  Notice the
// CalendarEventQuery object is passed in place of the feed URI
calendarService.getEventsFeed(query, callback, handleError);

}
// google.setOnLoadCallback(_run); Šī funkcija uzreiz pie lapas ielādes izmet pirmos rezultātus. Mūsu gadījumā to nevajag.
</script>
</head>
<body style=”font-family: Arial;border: 0 none;”>
<form>
<input type=”text” name=”searchText” onkeydown=”if (event.keyCode == 13) document.getElementById(‘btnSearch’).focus() “/>

<input type=’button’ id=”btnSearch” onclick=’_run(this.form.searchText.value, form)’ value=’Meklēt’/>
</form>
<div id=”content” style=”width:100%;height:10px”>…</div>
<iframe>te kalendāra kods</iframe>

</body>
</html>

Kategorijas: Internets
  1. Pagaidām komentāru nav.
  1. Pagaidām atpakaļsaišu nav.