Rose debug info
---------------

Давайте дружить! Я в соц сетях

Мои заметки об интерфейсах и веб разработке
Проекты: MyBreeze Oneitone
Microimage SunriseNow
Скачать Cities base MyBreeze
Карта сайта

Позднее Ctrl + ↑

Упрощение навигации с помощью автокомплита и подсказок

Когда работаешь над сайтом, который генерирует десятки или сотни тысяч страниц, то крайне важно обеспечить пользователю быстрый доступ к любой странице. Рассмотрим сначала самый длинный путь на сайте mybreeze.net

Задача: найти город Москва


Самый долгий путь — это искать через меню и пагинацию. Меню на сайте вложенное, так как логически правильно структурировать города по странам и континентам. На втором уровне меню выведены континенты. Далее, навигация уже в контентной области.
Получается, что когда пользователь хочет узнать долготу дня в Москве, ему нужно выбрать континент Европа, страну Россия, и он увидит список городов, отсортированных по алфавиту.

Всего 700 городов России, разбитые постранично с помощью пагинации по 30 штук на странице. Если переходить постранично, то нужно будет сделать еще несколько кликов пока найдется Москва. Такая навигация крайне неудобна.

Что я сделал для упрощения поиска города


Уже на уровне континента я добавил форму автокомплита. То есть пользователю достаточно ввести первые символы названия города и он получит результаты в виде списка подходящих городов.

Как видим на скрине, после ввода двух букв «мо», город Москва находится на 4 позиции. Получается, пользователь может кликнуть на любой континент в меню и ввести две буквы, чтобы найти город Москва.
Автокомплит добавлен и на уровне страны, если вдруг пользователь напрямую попал на страницу страны или не заметил автокомплит на уровне континента.
Чтобы сделать навигацию еще более удобной, я добавил к автокомплиту на уровне страны ссылки на три самых крупных города текущей страны, поскольку крупные города ищут гораздо чаще, чем более мелкие.

Я считаю, что в больших сайтах использование автокомплита целесообразно, как минимум в 90% случаев.

Курс валют ЦБ РФ за любой период — скрипт PHP

Я написал для себя небольшой скрипт, который парсит данные о курсе валют за любой период. В данном скрипте используется Api ЦБ РФ. Собственно, хочу поделиться им.

<?php
$link = MySQLi_connect("localhost", "login", "password", "database")
or die("<h3>Ошибка подключения к базе данных" . mysql_error() . "</h3>");
$dropTable = MySQLi_query($link, "DROP TABLE valute;");
$createTable = MySQLi_query($link, "CREATE TABLE valute (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
date DATE,
currencyID VARCHAR(15) NOT NULL,
numCode INT(10) NOT NULL,
charCode VARCHAR(15) NOT NULL,
name VARCHAR(100) NOT NULL,
value VARCHAR(20) NOT NULL
);");
//Получаем курсы валют
function getValute($date, $link)
{
    $xmlstring = file_get_contents("http://www.cbr.ru/scripts/XML_daily.asp?date_req=$date");
    $xml = simplexml_load_string($xmlstring);
    $json = json_encode($xml);
    $array = json_decode($json, TRUE);
    $dateNow = $array['@attributes']['Date'];
    $dateNow = strtotime($dateNow); // преобразование строки в  timestamp
    $dateNow = date('Y-m-d', $dateNow); // преобразование  timestamp в строку нужного формата
    echo $dateNow . "<br><br><br><br>";
    for ($i = 0; $i <= 50; $i++) {
        $currencyID = $array['Valute'][$i]['@attributes']['ID'];
        $numCode = $array['Valute'][$i]['NumCode'];
        $charCode = $array['Valute'][$i]['CharCode'];
        $name = $array['Valute'][$i]['Name'];
        $value = $array['Valute'][$i]['Value'];
        if (!$value) {
            break;
        } else {
            $createData = MySQLi_query($link, "INSERT INTO valute (date, currencyID, numCode, charCode, name, value)
 VALUES ('$dateNow', '$currencyID', '$numCode', '$charCode', '$name', '$value');");
            echo "<br>{$currencyID} {$value} {$numCode} {$charCode} {$name}<br>";
        }

    }
}

//собираем данные за 30 дней от текущей даты
for ($i = 0; $i < 30; $i++) {
    $date = date("d/m/Y", mktime(0, 0, 0, date('m'), date('d') - $i, date('Y')));
    getValute($date, $link);
}
?>

В результате мы получим таблицу с данными о курсе валют за последние 30 дней.

 50   3 мес   Данные   Разработка

Что такое «вечные» проекты и как они живут

В интернете принято относить каждый сайт к определенной категории. Я бы хотел рассмотреть те проекты, которые можно отнести к категории «вечные». Что это значит? К «вечным» проектам можно отнести те сайты, информация на которых будет актуальна, если не всегда, то очень долго. К таким можно отнести сервисы точного времени, погодные, курсы валют и т. д.
Такие проекты, как правило, имеют два основных канала трафика.

  1. Прямые переходы. Если сервис действительно полезный, то он будет востребован среди пользователей, соответственно, сайт будут посещать прямо из строки браузера.
  2. SEO. При правильном подходе к поисковой оптимизации сайта, он может приносить львиную долю трафика и в большом объеме.
    Что касается прямых переходов, то тут все понятно, а вот про SEO хотелось бы написать более подробно.
    Дело в том, что абсолютное большинство проектов на «вечные» темы живут достаточно давно. Такие проекты делают годами, в принципе торопиться некуда, так как данные будут актуальны всегда и спрос на них очень большой.

Львиная доля проектов не обновляют дизайн, только добавляют новые функции. Трафик на такие проекты идет годами, причем многие сайты — мультиязычные, соответственно, к семантическому ядру на русском языке добавляются ядра на самых разных языках.

Давайте посмотрим статистику популярности языков в интернете

Язык 2019, % 2011, %
1 английский 54 57,6
2 русский 5,9 4,8
3 немецкий 5,8 4,7
4 испанский 5 6,5
5 французский 3,9 4,6
6 японский 3,5 3,9
7 португальский 2,9 2
8 итальянский 2,4 2,1
9 персидский 2 4,5
10 польский 1,8 1,4

Как видим, если превратить проект в мультиязычный сайт, то потенциально можно привлечь в несколько раз больше трафика, а это хороший доход от рекламы в долларах.

Сколько трафика приходит на топовые проекты?


Трафик на многих сайтах измеряется в сотнях тысяч и миллионах посетителей в месяц. Такие проекты собирают посетителей, как пылесос.

Сейчас все также можно работать в «вечных» темах. Для того, чтобы занять свое место в нише, нужен максимально удобный сайт. Приведу пример достаточно молодого проекта.

Это только русскоязычная версия собирает 500 тысяч посетителей в месяц.

Собираем данные из Википедии и переносим их в MySQL

Часто требуется собрать дополнительные данные для размещения их на сайте. Бывает такое, что объем данных составляет одну таблицу на 200 строк. В качестве примера возьмем таблицу с наименованиями валют, она есть в википедии.

Для чего это вообще нужно?


Когда вы работаете в определенной нише, то крайне важно иметь под рукой все структурированные данные в данной теме. На основе этих данных можно обогощать проекты, которые вы разрабатываете. То есть смысл заключается в том, что лучше работать над проектом по принципу от «простого к сложному», потому что в большинстве случаев невозможно учесть абсолютно все на ранних этапах развития проекта и чтобы создать эталонный сайт, нужно хорошо понимать специфические аспекты ниши. Тут важны детали, а не простое выкатывание всех возможностей.
Итак, для начала мы просто скопируем нашу таблицу и перенесем ее в Excel.

Определим данные, которые нам нужны и вынесем их на отдельный лист.
Далее, добавим в начале листа новый столбец и пропишем начало команды SQL для вставки новых строк в таблицу MySQL. Для каждой строки надо прописать одинаковое начало команды.

После чего воспользуемся надостройкой PLESK и допишем вторую часть команды.

Скопируем все строки, откроем PHPMyAdmin, перейдем в нужную таблицу, откроем вкладку SQL и вставим строки с нашими командами.

Результат

Что может получиться на выходе?


Например, можно сделать раздел с актуальным курсом 165 валют.

 20   3 мес   Данные

Можно ли быстро сделать англоязычный сайт на 10 тысяч страниц

Работая над географическими сервисами, я понял, что имея базу данных городов на определенном языке, можно практически за 10 тысяч создавать объемные сайты.
В качестве примера, предлагаю рассмотреть проект sunrisenow.net
Изначально у меня уже была база на 1,5 млн мест с географическими координатами и часовыми поясами. Я решил сделать проект с расчетом долготы дня, но используя не все города, а только самые крупные. После фильтрации по населению, оставил 7500 мест.
Сделать скрипт расчета долготы дня — дело одного двух дней, так как в стандартной библиотеке PHP есть функции по работе со временем восхода и рассвета.
Приведу пример небольшого php скрипта на Laravel, который делает расчет долготы дня на три дня (вчера, сегодня, завтра).

public function sunriseNow($lat, $lng, $iana) {
        date_default_timezone_set($iana);
        $lastDay = Carbon::now()->subDay()->format('Y-m-d H:i:s');
        $now = Carbon::now()->format('Y-m-d H:i:s');
        $nextDay = Carbon::now()->addDay()->format('Y-m-d H:i:s');
        $massDate = [$lastDay, $now, $nextDay];
        $day = [];
        $a = 0;
        foreach($massDate as $key) {
            $sun_info = date_sun_info(strtotime($key), $lat, $lng);
            $a++;
            $sunrise = date("H:i:s", $sun_info['sunrise']);
            $transit = date("H:i:s", $sun_info['transit']);
            $sunset = date("H:i:s", $sun_info['sunset']);
            $day[$a] = $sunrise;
            $a++;
            $day[$a] = $transit;
            $a++;
            $day[$a] = $sunset;
        }
        $dateSunriseToday = Carbon::createFromTimeString($day[4]);
        $dateSunriseYestoday = Carbon::createFromTimeString($day[1]);
        $dateSunsetToday = Carbon::createFromTimeString($day[6]);
        $dateSunsetYestoday = Carbon::createFromTimeString($day[3]);
        $totalDurationSunrise = $dateSunriseYestoday->diffInMinutes($dateSunriseToday, false);
        $totalDurationSunset = $dateSunsetYestoday->diffInMinutes($dateSunsetToday, false);
        if($totalDurationSunrise < 0) {
            $color = 'red';
        }
        elseif($totalDurationSunrise > 0) {
            $totalDurationSunrise = "+".$totalDurationSunrise;
            $color = 'green';
        }
        elseif($totalDurationSunrise === 0){
            $color = 'black';
        }
        if($totalDurationSunset < 0) {
            $color = 'red';
        }
        elseif($totalDurationSunset > 0) {
            $color = 'green';
            $totalDurationSunset = "+".$totalDurationSunset;
        }
        elseif($totalDurationSunset === 0){
            $color = 'black';
        }
        $printSunrise = " <span style='color:$color'><small>".$totalDurationSunrise."</span> мин.</small>";
        $printSunset = " <span style='color:$color'><small>".$totalDurationSunset."</span> мин.</small>";
        if($totalDurationSunset === 0) {
            $printSunset = '';
        }
        if($totalDurationSunrise === 0) {
            $printSunrise = '';
        }

        $day[4] = $day[4].$printSunrise;
        $day[6] = $day[6].$printSunset;

        return $day;


    }

Результат выполнения скрипта

Как видим ничего сложного нет. Немного модифицировав скрипт, можно получить расчет на любой период.
Так как все страницы проекта являются однотипными, затраты на перевод сводятся к минимуму. Фактически надо перевести мета теги, небольшие отрывки текста и шаблонные данные (даты и др.). Добавив данные о погоде и текущем времени в заданном часовом поясе, страницы становятся еще информативнее.

Получается, чтобы создать проект на 10 тысяч страниц на английском языке надо:

  1. Приобрести базу городов;
  2. Купить или свестать легкий шаблон;
  3. Написать несколько php скриптов;
  4. Сделать перевод объемом 2-3 страницы;
  5. Купить несколько иконок.

Думаю, что затраты на такой проект не превысят и 10 тысяч рублей.

Ранее Ctrl + ↓