Нами была закончена разработка методических рекомендаций по разработке информационной системы на основе свободного программного обеспечения для компании Орион Экспресс. Популярные рекомендации по разработке модулей для Joomla и SugarCRM опубликованы в блоге компании.
Теперь мы запускаем проект по созданию виджета на основе javascript для размещения музыкального проигрывателя в блогах и на веб-сайтах. Это — первый шаг в создании технологии асинхронного видеообщения.
Проигрыватель исполняет композиции из Youtube, требования к первому этапу следующие:
- виджет проигрывает народную музыку грустных детей Африки;
- треки выбираются по популярности и ключевым словам;
- после окончания проигрывания одного трека начинает проигрываться следующий трек;
- виджет размещается под свободной лицензией Apache на Google Code и может быть вставлен командой
<script>
; - виджет интегрирован в этот блог.
Задача очень инновационная — на YouTube лежит большое количество старой хорошей музыки, а проигрывателя нормального нет. В стандартном проигрывателе нужно после каждого трека нажимать кнопку, чтобы YouTube продолжил играть дальше. Как и всегда Google API, для создания инновационного решения достаточно всего странички кода помноженного на большое трудолюбие, чтобы эта страничка заработала. Интернет-радио на основе полностью бесплатных технологий — почему бы этому свободному проекту не превратиться в популярный, а его создателю — не проснуться знаменитым?
Библиотека может загрузить YouTube API, например, с помощью getScript()
и создать тэг, содержащий Flash-проигрыватель. Далее запросить парочку случайных видео по ключевым словам, выбрать то, которое окажется популярнее и запустить проигрывание. По завершении проигрывания повторить. После того, как это заработает, можно придумать ещё много чего интересного:
- оформление в виде плагина jquery;
- возможность выбора музыки из нескольких категорий;
- отключение видеопотока ролика;
- использование бескнопочного (chromeless) проигрывателя;
- подкачка следующего потока во время проигрывания;
- добавление рекламного трека Датаведа после заданного количества проигранных композиций;
- кнопка-возможность пропустить текущий трек;
- кнопка-like с сайта YouTube;
- возможность указания стартового трека в параметре GET страницы для того, чтобы при нажатии на кнопки like, tweet и g+ посылалась ссылка на страницу Датаведа с параметром, соответствующим проигрываемой записи;
- ещё Ваши идеи в комментариях к этой заметке или среди интересных примеров.
Ждём от исполнителя желания работать с API Google, оценку по времени для первого этапа, по деньгам и электронный адрес. На данной задаче работы не заканчиваются — в перспективе было бы интересно интегрировать на сайт Машу для того, чтобы улучшить качество материалов на сайте и вики.
1 комментарий :
Сделать зеркалирование сайта на javascript (wget –m)
Есть вот такой скрипт на Google Apps Script, который позволяет зеркалировать закрывающиеся сайты, например, knol.google.com – переносить их на wiki.dataved.ru. Есть желание сохранять с полезных сайтов материалы, даже если их коммерческие владельцы не могут более за это платить.
var util = {
FETCH_LABEL: 'datavedFetchPage',
encodeName: function(url) {
var schemeRe = /^https?:\/\//;
return url.replace(schemeRe, '').replace(/\W+/g, '_');
},
getHost: function(url) {
return url.replace(/^(https?:\/\/[^\/]*).*/, $1);
},
getLocalPath: function(url) {
return url.replace(/[^\/]*$/);
}
}
var scheduler = {
site: SitesApp.getActiveSite(),
add: function(url) {
var page;
var name = util.encodeName(url);
try {
page = this.site.getChildByName(name);
} catch (e) {
page = this.site.createWebPage(url, name, util.FETCH_LABEL);
}
}
}
function doGet(e) {
var app = UiApp.createApplication();
var num = ScriptProperties.getProperty('fetchedPages');
if (!num) num = 0;
var infoLabel = app.createLabel('Fetched ' + num + ' pages').setStyleAttribute('fontSize', '16px');
app.add(infoLabel);
return app;
}
function testFetch() {
scheduler.add('http://knol.google.com');
}
var wGet = {
FETCH_MAX: 10,
site: SitesApp.getActiveSite(),
process: function() {
var pages = this.site.search(util.FETCH_LABEL, { max: this.FETCH_MAX });
var page;
while (page = pages.shift()) {
processPage(page);
}
},
processPage: function(page) {
var url = page.getTitle();
var host = getHost(url);
var localPath = getLocalPath(url);
var response = UrlFetchApp.fetch(url);
var content = response.getContentText();
var hrefRe = /(<\s*a[^>]\s+href\s*=\s*(['"]))([^'">]+)(\2[^>]*>)/;
content = content.replace(hrefRe, function(tag, p1, p2, url, p4) {
if (url.test(/^\//)) {
url = host + url;
} else if (!url.test(/^https?:\/\//)) {
url = localPath + url;
}
scheduler.scheduleFetch(url);
return p1 + util.encode(url) + p4;
});
page.setHtmlContent(content);
}
}
function processSiteLinks() {
wGet.process();
}
Скрипт несколько недоотлажен, есть у него и ещё одна проблема. Выкачивать странички долго, и Google ограничивает общее время работы облачного скрипта. Поэтому большой сайт будет выкачиваться годами. Идея – перенести часть работы на клиента. На каждую страничку вики можно вставлять не только скрипты Google Apps, но и обычные клиентские скрипты, которые могут делать часть работы краудсорсингом копьютеров тех, кто эту вики читает.
Что-то сделать не получится, например, кросс-доменные вызовы. С другой стороны, даже функциональность кросс-доменных вызовов реализуется в custom search, когда мы запрашиваем предпросмотр страницы. Тут мы упираемся в другое ограничение – бесплатная версия custom search ограничена 100 вызовами в день. Это даст нам, скажем, 5000 страниц, если каждым вызовом загрузить по 50 страниц. Кто-то типа Yahoo дарит кросс-домэйн прокси с какими-то другими ограничениями. Что лучше?
Возможно постановка задачи поменяется по ходу исследования API. Не получится сделать - было бы интересно по результатам получить хотя бы статью нам на сайт. С анонсом в блоге компании на Хабре.
Отправить комментарий