Итак, я знаю, что говорил это раньше, но мне нравится создавать совершенно бесполезные, но забавные игрушки. Честно говоря, если бы я позволил практичности быть моим гидом, я, вероятно, никогда ничего не построю, и я не уверен, как я смогу учиться. Пожалуйста, имейте это в виду, когда читаете следующее. Я построил то, что следует, в качестве предлога, чтобы больше практиковать свои отбивные в Узле, чтобы не приносить что-то действительно стоящее в Интернет. Если вы не любите котят. Если так, это эпично.
Примерно неделю назад я видел твит от Кристиана Хайльмана о новом сайте SynthCats . Как вы, наверное, догадались, это сайт, наполненный изображениями кошек с клавиатурами и синтезаторами. Будучи непримиримым ребенком 80-х и новой волны, я действительно мог зайти на такой сайт. Это заставило меня задуматься; Вы могли бы взять любую комбинацию кошек и создать интересный сайт.
Из этого возникла идея AndKittens . Я представил себе сайт, на котором вы можете просто ввести URL, например, pugs.andkittens.us и увидеть коллекцию фотографий мопсов с котятами.
Строительство этого потребовало нескольких разных частей. Первой была поддержка домена с подстановочными знаками и самоанализ этого домена изнутри Node. На самом деле это было довольно тривиально, и на прошлой неделе я кратко описал это в своем блоге: Node.js Quickie: Проверка текущего доменного имени .
Используя этот код в качестве отправной точки, я просто анализирую поддомен и загружаю одно из двух представлений:
function getSubdomain(h) { var parts = h.split("."); if(parts.length == 2) return "www"; return parts[0]; } exports.index = function(req, res) { var subdomain = getSubdomain(req.headers.host); if(subdomain === 'www') { res.render('index'); } else { res.render('viewer',{title:subdomain + ' and Kittens'}); } };
Вторым аспектом была поддержка динамического поиска изображений. Google вполне подходит для этого, но у них нет API для службы поиска. Вместо этого я обратился к Microsoft и их Bing Search API . Из-за этого было немного сложно зарегистрироваться, и их документы было немного сложно проанализировать (документы Word, правда? Я вообще не против Word, но я ожидаю, что мои документы API будут веб-страницами!), Но как только я прошел Первоначальная установка была довольно тривиальной, чтобы позвонить с узла.
Я написал быструю библиотеку оболочки. На самом деле, я бы не стал называть это библиотекой, поскольку она ориентирована только на поиск изображений, но ее можно было бы сделать более обобщенной, если бы люди захотели взять ее и запустить. Вот код
var https = require('https'); var qs = require('querystring'); BingSearch = function(key) { this.key = key; } BingSearch.prototype.search = function(s,cb) { var result = {success:false}; console.log("Bing Search for "+s); var options = { hostname:"api.datamarket.azure.com", path:"/Bing/Search/Image?Query=%27" + qs.escape(s) + "%27&Adult=%27strict%27&$format=json", method:"GET", auth:":"+this.key, rejectUnauthorized:false } https.get(options, function(res) { console.log("Got response: " + res.statusCode); var body = ""; res.on('data', function (chunk) { body += chunk; }); res.on('end', function() { result.success = true; var data = JSON.parse(body); result.data = data.d.results; cb(result); }); }).on('error', function(e) { console.log("Got error: " + e.message); cb(result); }); } exports.BingSearch = BingSearch;
Две важные вещи здесь. Во-первых, Node.js выдает ошибку, если вы пытаетесь использовать сайт HTTPS с сертификатом, который он не распознает. Ему не понравился сертификат Microsoft, и, честно говоря, я не знаю почему. Я доверяю Microsoft, хотя. (Действительно.) Я использовал аргумент rejectUnauthorized, чтобы сказать Node.js, чтобы он верил, что я знал, что я делал, и просто нажал на проклятый API. (Мне бы очень хотелось, чтобы ColdFusion позволил это сделать!) Второе, что нужно помнить, это то, что Microsoft любит использовать прописные буквы в своих аргументах. Если вы не соответствуете точно, то вы получите ошибку. Странно, что они не соответствуют друг другу. Обратите внимание на часть $ format = json в конце.
По моему мнению, если нет какой-то важной причины производительности, глупо требовать точного соответствия случая аргументам.
В любом случае, вы поняли идею. Это конец. Передний конец сделал мой приятель Тай. Tai — это умное печенье, которое я знаю много лет, но, как ни странно, у него нет блога или веб-сайта, поэтому он не получает от меня ссылку здесь. Он разработал аспект «просмотра» сайта и сделал хороший переход от одного изображения к другому. Прямо сейчас есть небольшая ошибка в том, что если ошибка не загружается, мы не сразу перейдем к следующему изображению (и сбросим его из набора результатов).
Если вы хотите увидеть код, посмотрите репозиторий GitHub здесь: https://github.com/cfjedimaster/AndKittens . Да, я понимаю, что мой ключ Bing там. Мне нужно избавиться от этого, и я, вероятно, до конца месяца максимально использую свой бесплатный ключ. Такое случается.
Вот и все. Завтра я собираюсь поговорить о хостинге, который я использовал, Modulus .