Независимо от того давал пользователь доступ к api спредуса или нет, разработчику всегда доступны кросдоменные запросы: однако при запросах для каждого сайта храниться отдельный набор cookies, таким образом, что если сайт
torrentbox.org авторизовался во vkontakte.ru используя email и пароль, которые ввёл сам пользователь для этих сайтов сайт tfgiant.com не сможет получить доступ к данным vkotankte.ru словно tfgiant.com делает запросы в отдельном браузере (или компьютере)
Примерный сценарий взаимодействия
Пользователь с установленным spreadus (ядро + плагин) заходит на произвольный сайт, например http://torrentbox.org. На этой странице заставляет браузер обратится к плагин. Далее js на странице обращается к данному объекту для получения авторизации:
var api_proxy = document.getElementById('sprapi');
var add_torrent = function(link){
var params = {
method: 'add_torrent',
file: link
};
params.signature = sign_params(params, api_proxy.token);
api_proxy.api(params);
};
if (api_proxy.token){
add_torrent('http://torrentbox.org/t/244fba45a');
} else{
var callback = function(token){
add_torrent('http://torrentbox.org/t/244fba45a');
};
api_proxy.getAuth(callback);
}
Если пользователь когда-либо уже давал доступ к api этому сайту, то будет доступно свойство token и вызов api. У npapi есть возможность определять на каком url запущен его объект, и следовательно идентифицировать сайт.
Если пользователь ещё не давал доступ сайту, то сайт запросит авторизацию, а ядро откроет в браузере страницу localhost:500304/getauth/?for=http://torrentbox.org, где пользователь может дать доступ данному сайту к api спредуса. Как только это поизойдёт вызовится callback.
После того как пользователь даёт доступ к api средпуса данному сайту, сайт может добавлять закачки (торренты и файлы в сейти gnutella), управлять списком закачек и их свойствами (свой список для каждого сайта)
Рекомендую не пренебрегать агрессивным поведением для защиты собственных интересов — как для обороны так и для наступления.
Такое поведение вовсе не обязательно связано с насилием.
Человек не способный на открытую агрессию, представляющийся неагрессивным хорошишом — мудак и нарцисс. Его агрессия будет скрытой, иcподтишка, а невозможность агрессии для себя он будет оправдывать тем, что он белый и пушистый в отличие от других людей.
Для хорошиша открытая конкуренция недопустима, потому что она подразумевает агрессивное поведение со стороны, что требует ответного агрессивного поведения от него самого для защиты, а на это пуся неспособен.
Фильтрация хамства, использование логики и агрессивное поведение позволяют не только работать эффективней, но и чувствовать себя комфортнее.
Если ты — честная пуся, то возможность агрессивного поведения конкретнореально устранит проблему, когда любое твое общение с другими малознакомыми людьми или не друзьями сопровождается чувством тревоги (в связи с их агрессивным поведением в твой адрес, потенциальной возможностью нанесения тебе анальной травмы).
Я отказался от пренебрежения возможностью агрессивного поведения и чувствую себя достойно — на 25 см!
Концентрация поиска на тематическом поиске по материалам самого рамблера — поиск по вебу становится лишь одной из тематик.
Поиск может производится более целенаправленно по заведениям и их расположению, кино, афише и картам расположения кинотеатров (из афиши.ру), (события — из nightparty), видео, автомобили, словари, картинки.
Этот пункт целесообразен в связи со специализации рамблера на сфере развлечений и плохим качеством поиска по вебу, и причинам описанными в следующем пункте.
Распределять результаты из разных тематик равномерно среди результатов поиска. 2—3 лучших результата из каждой тематики. По мере необходимости пользователь уточнит тематику
Поисковики уже сейчас разбавляют поиск по вебу результатами из других категорий, однако, поиска по всем категориям сразу сейчас не производит никто. А зря — с таким поиском пользователь быстрей определит что он ищет и найдёт это.
Это не только ускорит нахождение результата, но и приучит пользователя к поиску по другим сервисам. Кроме того это привлечёт к поиску больше пользователей — тех кто видел в этом поиске только поиск по вебу и не был доволен его качеством.
Использовать наглядное представление результатов
Это отдельная задача для проработки, но результаты необходимо представлять наглядно.
Например, если по запросу нашлись автомобили — можно показать их снимки, если фильмы — можно показать скриншоты и трейлеры, карту ближайших кинотеатров (если кино идёт сейчас). Если слово ищется довольно редко и есть определение в словаре — показать определение.
Отображение результатов по мере ввода запроса
отображение рекламы с задержкой после ввода символа в 300 мс (рекламодатели платят за клики)
отображение результатов поиска по первому саджесту
при “вводе” показывать результаты непосредственно по запросу и рекламу оплаченную “за показы”
отображая рекламу оперативно и в первом порядке мы
показываем пользователю, что интерфейс работает и что пользователь на верном пути
показываем какой ни какой результат, который может его удовлетворить, такие результаты можно действительно отображать быстро ведь поиск там проще, чем по вебу
ненавязчиво обращаем больше внимания на рекламу — в тот момент ему просто больше не на что смотреть, что, естественно, может принести прибыль
Не обязательно показывать рекламу оплаченную за клики, можно и за показы, но тогда показы нужно считать только после определённого минимального промежутка времени — такой период необходимо подобрать тестированием, что бы CTR был не ниже, чем сейчас у такой рекламы.
Отображая результаты поиска по первому саджесту, мы решаем проблему производительности и нагруженности — для таких саджестов можно построить индекс и очень быстро отвечать на такие запросы.
Для сервисов у которых просто устроен поиск можно показывать не результаты по саджесту, а сразу результаты. Это почти все сервисы, кроме поиска по вебу (авто, афиша.ру, словари…).
Кроме того можно показывать результаты по саджестам, но определённые для каждой тематики (сервиса) отдельно.
Для оценки эффективности внедрения можно сравнить
пользовательскую удовлетворённость результатом
время которое пользователь тратит на поиск той или иной вещи;
сколько дополнительных страниц открывает или запросов делает пользователь после открытия первого результата;
прибыльность: отношения количества кликов рекламным объявлениям за период поиска на продолжительность этого периода
Что бы понять откуда и зачем я записал ту или иную функцию, наверно, стоит показать цели существования программы:
а) Дать пользователям стабильную (бесперебойную, независимую) возможностью быстро и бесплатно прослушать любой трек или посмотреть любое видео. (большинство функций относится к этому пункту)
б) Распространение открытых стандартов
в) Интеграция p2p в веб.
г) Копилефт, что бы это ни значило.
д) Дать возможность внешним источникам (чему угодно вне программы) помогать программе исполнять пунты «а, б, в, г»
Функциональность
Работа с gnutella2: скачивание, обычное, параллельное, последовательно-параллельное для любых файлов
Воспроизведение на лету Ogg: theora (видео), vorbis (аудио), flac (аудио)
Поиск по p2p сети
Распознание музыкальных файлов с помощью muzicbrainz через муз.отпечатки (c последующей передачей такой информации тем, кто запросит)
Библиотека (по сути конкуренция обычным плеерам)
Поиск по библиотеке
Воспроизведение плейлистов xsf и rss (с поиском и скачиванием наперёд треков стоящих в очереди на воспроизведение)
Тегирование — для пользовательского поиска, для замены устаревшим плейлистам (даёшь тег треку (жанровый или какой угодно), а потом просто ищешь, получаешь список — это и есть плейлист)
Внутренний скроблер — (статистика публична) с возможностью закачать в себя скроблинг из last.fm
Работа с last.fm по логину (без пароля — рекомендации, любимые треки) или по логину и паролю (тоже + скроблинг, продвинутые рекомендации, добавление в избранное, тегирование)
Работа с подписями (защищаем своё жилище)
Личностная идентификация (человек по почте присылает тебе открытый ключ, а потом ты его ищешь, например по хешу и смотришь, как подписываются заголовки. только ты знаешь как его зовут, следовательно подписывается довольно безопасно)
Телефония!?
Чёрные списки
Доверительные поиски (ячейка сети при возвращении результатов поиска подписывает их своим ключом)
Автообновления через p2p с помощью подписей
Работа с браузером — поддержка протокола magnet в элементе video и просто как протокол (можно открывать в окнах браузера)
Конвертация на лету mp3 в ogg с возможностью и воспроизведения его на лету (mp3 файл помещается туда же куда и, например, exe файлы, а ogg — в библиотеку)
Конфертация видео форматов на лету в ogg (такая возможность должна подключаться «по требованию» — кодеки подружаются при соглассии пользователя при возникновении необходимости)
API для формирования событийной ленты как в френдфиде, фейсбуке для событий которые могу быть опубликованы с безопастностью для пользователя (например лайки) (сохранение это ленты во внутренней базы с первых версий программы даже до появления api)
Сохранение информации об артистах с last.fm в кеше и передача её по запросу. (биография, похожие артисты, теги, популярные песни и пр.)
Сохранение информации о треках с last.fm и передача её по запросу. (похожие треки и др.)
Возможно поддержка технологии битторрент
Супер http бекедн. http://backendhubip/? (пригодится для оживления p2p во флеше; подробности позже)
Постарался написать все функции которые вижу необходимыми для нормального и независимого от чего либо функционирования спредуса, а также для построения сервисов основанных на взаимодействии с p2p сетью. Выглядит массивно, но интерфейс не должен быть комбайновым — в этом я вижу свою основную задачу.
Плагин понимает html код, который указывает на мультимедиа файл, расположенный в p2p сети, умеет последовательно-параллельно скачивать его и проигрывать его на лету.
Пользователь может сохранить файл или выбрать место в которое он будет скачиваться.
Плагин должен иметь встроенные vorbis, flac, theora декодеры и проигрывать именно эти форматы.
Плагин должен работать по протоколу сети gnutella2.
Возможно также работа с протоколом torrent и воспроизведение любого из основных мультимедиа файлов с помощью системных кодеков. При этом скаченные части во время простоев должны кусками кодироваться в ogg, и раздаваться, а другие части, могут быть скачены у других клиентов сети. И так до создания полноценного дубликата файла в ogg формате.
Добавлено
Режим радио, принимающий для воспроизведения по порядку XSPF и RSS; сооствественно — last.fm рекоммендации