Как посчитать количество скачиваний файла
Артур Кузяков, генеральный директор компании DriverPack Solution, поделился с редакторами рубрики Growth Hacks нестандартным подходом к получению и анализу статистики скачиваний файлов и программ на сайте.
Для улучшения нашего сервиса ( drp.su) мы отслеживаем с помощью Google Analytics и «Яндекс.Метрики» конверсию пользователей в воронках следующего типа.
- Посетил сайт.
- Нажал на кнопку «скачать приложение».
- Запустил приложение.
- Приложение установило все драйвера.
Это стандартная задача для веб- и мобильного аналитиков, но мало кто работает с переходами от загрузки программы на сайте к её запуску на компьютере. Это связано с тем, что в цикле использования закачка файла или программы всего одна и потери там небольшие, или с тем, что на других уровнях воронки проблемы гораздо больше.
С наших Download-серверов каждый день скачивается несколько миллионов драйверов (статичных .exe и .zip файлов). Чтобы отслеживать и устранять проблемы на этапе скачивания пользователем приложения с сайта и приложением драйверов с сервера, нам надо было ответить на следующие вопросы: кто, когда, как часто и сколько скачивает драйверов, и, что не менее важно, успешно ли завершились эти скачивания.
Самое очевидное решение — проанализировать логи Nginx. Для этого можно было бы использовать такие инструменты, как AWstat, GoAccess, ELK stack или Splunk, или в крайнем случае собирать логи где-то у себя. В использовании каждого из перечисленных инструментов есть свои минусы: неудобный интерфейс, скудность получаемых данных, сложность настройки, необходимость «допиливать» и так далее, то есть все вышеперечисленные решения по тем или иным причинам не подходят.
Помимо несоответствия существующих решений выставляемым требованиям, мало ответить на вопросы, кто, когда, как часто и сколько скачивает драйверов. Эти данные надо объединить с данными, которые хранятся в Google Analytics. Только тогда можно будет увидеть полную картину, построив сегменты пользователей, воронки и отчёты.
Вот тогда мы и решили заставить веб-сервер Nginx отправлять события в Google Analytics сразу после завершения скачивания файла. Бонусом добавили в событие завершения закачки отправку IP, время начала скачивания, количество переданных байт и даже Google ClientID.
Сделав интеграцию Nginx и Google Analytics мы получили возможность анализировать скачивания статичных файлов, к которым раньше невозможно было привязать счётчик Google Analytics.
Информация по загрузкам статических файлов на наших Download-серверах приходит в Google Analytics в режиме «реального времени».
Заработало
Теперь можно отслеживать, сколько происходит реальных скачиваний нашего продукта. Причём подсчёт уникальных загрузок производится в разы точнее, чем если делать это по IP-адресу, так как к каждому пользователю привязан уникальный идентификатор — ClientID.
Ошибки 404 и 500 также отслеживаются через события ( events) в Google Analytics.
Благодаря тому, что мы передаём в событии реальный IP-адрес пользователя, можно увидеть распределение скачиваний по гео.
Так как пробрасывается реальный Google Analytics ClientID пользователя, можно верить отчётам о:
- числе новых и вернувшихся пользователей;
- периодичности посещений пользователя и времени с его последнего посещения;
- вовлечении пользователей;
- ключевых словах, по которым пользователь пришёл к нам на сайт с самого начала.
Nginx сам передаёт правильный User-Agent, что даёт возможность построить отчёты по браузерам и ОС. В отчёте можно встретить wget, которым наш DriverPack Online выкачивает драйверы, реальные браузеры, а также роботов и парсеров.
Для кого-то окажется очень ценной информация о загрузках с мобильных устройств.
К большому сожалению, передать в Google Analytics Referrer мы пока не можем, так как Nginx не поддерживает urlencode(). В связи с этим отчёты по каналам работать не будут (подробности в разделе «Недостатки»).
Что это нам дало, и что это может дать вам
Отправляя Nginx-логи в Google Analytics, мы смогли добавить новый уровень в воронку использования продукта.
- Посетил сайт.
- Нажал на кнопку «скачать приложение».
- Скачал приложение (завершилось скачивание).
- Запустил приложение.
- Приложение установило все драйвера.
Новый уровень позволил оценить потерю пользователей, связанную с такими факторами, как обрывы закачек, незапуск приложения после успешного скачивания (например, если приложение качается дольше приемлемого времени и пользователь про него забывает), медленное скачивание или большой размер приложения.
При этом возможность пробрасывать Google Analytics ClientID позволяет связать события из Nginx со всеми данными в Google Analytics: версия браузера, время дня, география, демография аудитории и даже кастомные события.
Мы успешно используем все эти сведения для того, чтобы увеличить количество запусков. Например, увеличив скорость доставки контента в отдельные регионы, мы смогли снизить потерю пользователей между вторым и четвёртым уровнем более чем в два раза.
Бонусным эффектом от внедрения модуля стал отлов возникающих ошибок 404, что позволило оперативно реагировать на их появление и повысить качество предоставляемой услуги. По приблизительным оценкам, оперативная работа с 404 ошибками снизила потери пользователей в месяц на 40 тысяч.
Повторные скачивания в рамках одной сессии также свидетельствуют о проблемах, например, об обрыве загрузки или о том, что пользователь не нашёл скачанное приложение.
Наш модуль даёт возможность перенести данные о проблемах с загрузкой файлов в знакомый и мощный инструмент аналитики (Google Analytics). Это позволяет работать в воронке использования продукта с новым уровнем, который обычно пропускают.
Как вы используете открывшиеся возможности, решать вам. Будем рады получить ваши варианты применения и предложения по улучшению.
Ложка дёгтя
Скрипт работает отлично и на 100% соответствует нашим требованиям, но в него можно добавить несколько улучшений.
Do it yourself
1. Создаём отдельно счётчик Google Analytics, с которым будут работать все Download-серверы. Или используем номер существующего счётчика.
2. В настройках счётчика «Пользовательские параметры» добавляем специальные параметры:
- dimension1. Название “ClientID", уровень «Пользователь»;
- dimension2. Название “request_time", уровень “Hit";
- dimension3. Название “body_bytes_sent", уровень “Hit".
Это поможет нам рассчитать скорость закачки и даже процент оборванных скачиваний.
3. Создаём конфиг с названием google-analytics в директории /etc/nginx/.
4. Получаем конфигурационный файл /etc/nginx/conf.d/default.config.
5. Перезапускаем Nginx.
6. Настраиваем счётчик на сайте таким образом, чтобы ClientID сохранялся в Cookie.
Напоследок о точности
Точность статистики до 99%. Мы проанализировали несколько файлов и сравнили данные Google Analytics с данными из логов.
Сравнение показывает, что Google Analytics подсчитывает уникальные загрузки ещё точнее, чем мы можем сделать это вручную.
Присылайте собственные кейсы, в результате которых вам удалось заметно улучшить (или, наоборот, ухудшить) показатели проекта. Интересные эксперименты обязательно попадут на страницы рубрики Growth Hacks.
Данный урок покажет вам как установить предзагрузочные параметры при помощи PHP и используя .htaccess.
Вы только подумайте о возможностях данного плагина! Он будет отслеживать количество скачиваний, проверять есть ли у пользователя права на загрузку определенного файла, установит лимит скачиваний и многое многое другое…
Возможность отслеживать скачивание файлов - это, то о чем мечтают многие разработчики.
Итак, что нам понадобится?
• веб-сервер Apache с включенным модулем перезаписи mod_rewrite
• хороший текстовый редактор (вроде notepad++)
• в данном уроке мы будем работать с PHP
Сначала нам надо подготовить .htaccess файл. Для этого вам надо либо настроить уже существующий, либо создать новый. Чтобы создать новый .htaccess файл в блокноте Notepad++, откройте новый документ и сохраните его под именем .htaccess. Данный файл выступает как скрытый в системе Unix.
Впишите следующие строки в свой .htaccess файл:
Они будут перенаправлять все файлы в форматах .rar, .zip и .pdf к файлу download.php, а путь к файлу использовать как параметр. При добавлении расширений, обязательно отделяйте их друг от друга при помощи вертикальной черты “|”.
Несколько примечаний, касающихся .htaccess файла:
Данный файл работает только с папкой, в которую он помещен, а так же с ее подкаталогами. Если файл размещен ну скажем в папке /files/, путь к нему не будет использован как параметр, вам придется добавлять его самостоятельно либо в download.php, либо в .htaccess файл.
Разместите созданный файл в корневую папку своего сайта.
Теперь мы создадим таблицу при помощи MySQL. Вы также можете сделать это, используя phpMyAdmin.
Если у вас уже есть таблица под названием download, то вам придется изменять SQL код.
Запустите SQL-оператор -- он создаст новую таблицу.
Ну вот пора бы заняться и PHP кодом.
Данный код позволит вам отслеживать все запросы на скачивание файлов при помощи созданной нами таблицы.
Позвольте мне вкратце объяснить основные моменты кода, первая часть кода отвечает за связь с базой данных, не забудьте поставить значения, соответствующие вашим настройкам сервера.
Можете указать другие форматы в элементе $filetypes (понимает все популярные расширения файлов).
Вот в принципе и все!
5 последних уроков рубрики "Разное"
Как выбрать хороший хостинг для своего сайта?
Выбрать хороший хостинг для своего сайта достаточно сложная задача. Особенно сейчас, когда на рынке услуг хостинга действует несколько сотен игроков с очень привлекательными предложениями. Хорошим вариантом является лидер рейтинга Хостинг Ниндзя — Макхост.
Как разместить свой сайт на хостинге? Правильно выбранный хороший хостинг - это будущее Ваших сайтов
Разработка веб-сайтов с помощью онлайн платформы Wrike
Создание вебсайта - процесс трудоёмкий, требующий слаженного взаимодействия между заказчиком и исполнителем, а также между всеми членами коллектива, вовлечёнными в проект. И в этом очень хорошее подспорье окажет онлайн платформа Wrike.
20 ресурсов для прототипирования
Подборка из нескольких десятков ресурсов для создания мокапов и прототипов.
Топ 10 бесплатных хостингов
Небольшая подборка провайдеров бесплатного хостинга с подробным описанием.
От автора: при создании сайтов очень часто необходимо выкладывать на его страницах материалы для скачивания. При этом полезно знать, какой популярностью пользуется тот или иной файл, а для этого необходимо вести учет количества его скачиваний. Поэтому в данном уроке мы с Вами рассмотрим два варианта создания счетчика скачивания файлов.
Постановка задачи
Итак, в данном уроке нам с Вами необходимо реализовать счетчик скачивания файлов на страницах сайта. Значит, первым делом необходимо определиться, где мы будем хранить результат подсчета скачивания того или иного файла. На мой взгляд, наилучшим решением – является база данных. Поэтому создадим базу данных dc, в которой далее по ходу урока создадим две таблицы – по одной для каждого варианта реализации счетчика загрузок.
Вариант №1
Итак, для первого варианта создаем таблицу count1 в базе данных dc, с двумя полями:
Бесплатный курс по PHP программированию
Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC
В курсе 39 уроков | 15 часов видео | исходники для каждого урока
name – поле для хранения имени файла (тип данных String). Важное замечание: имена файлов – должны быть уникальными, а значит нельзя допускать повторений в данном столбце. Поэтому данному полю необходимо присвоить индекс UNIQUE (если одному из полей таблицы присвоен данный индекс, значит в данном поле могут содержаться только уникальные данные, то есть вставка повторяющегося значения приведет к ошибке).
count – количество скачивания файла (тип данных Integer). Значение данного поля по умолчанию – 1.
SQL – запрос для создания таблицы в базе данных.
Теперь давайте определимся с логикой работы скрипта. Изначально, в базе данных нет ни одной записи. Файлы для скачивания, сохранены в отдельной папке на нашем сайте (в моем случае – это папка files), и выводятся на его страницах в соответствии с его задачами и дизайном.
В данном файле создадим константы с настройками для подключения к базе данных (HOST, USER, PASS, DB), так же добавим константу DIR – путь к файлам для скачивания. А также массив $types – типы фалов, допустимые для загрузки.
Далее создадим файл d_func.php, в котором будут описаны функции, необходимые для работы приложения в целом. Создадим первую функцию connect(), которая будет выполнять подключение к базе данных, используя расширение php – mysqli (улучшенный движок по работе с СУБД MySql). Поэтому данная функция будет возвращать идентификатор открытого соединения, который нам потребуется для дальнейшей работы. Код функции connect():
Теперь, так как мы условились, что в таблицу count1, будет записана информация о скачиваемых файлах (имя и количество скачиваний), значит опишем следующую функцию get_count(), которая получит всю информацию из данной таблицы. И как результат вернет массив, в каждой ячейке которого будет содержаться имя файла (ключ ячейки) и количество его скачиваний (значение ячейки):
Файл, который выводит список файлов из папки files, в виде ссылок, выглядит следующим образом:
Как Вы видите, его код довольно простой. Вначале подключаем файл конфигурации и функций. Затем выполняем подключение к базе данных (функция connect()), далее в переменную $row сохраняем информацию о ранее скачиваемых файлах (функция get_count()), если конечно такие имеются. Далее обходим в цикле каждый элемент папки files, и если это файл – выводим его на экран в виде ссылки. Путь ссылки формируем следующим образом – вначале указываем имя файла обработчика (файл который будет выполнять подсчет скачивания), в нашем случае это файл download.php и используя метод GET (через адресную), передаем имя файла для скачивания.
Теперь создадим файл downlad.php и добавим следующий код:
В данном файле необходимо проверить, существует ли в суперглобальном массиве $_GET, ячейка file, то есть имя файла для скачивания. Если такая ячейка существует, значит, вызываем функцию update_file($file,$types), передавая ей имя файла и массив допустимых типов файлов для скачивания.
Теперь давайте откроем файл d_funct.php и опишем функцию update_file(),которая должна подсчитать количество скачивания файла и отдать его пользователю для загрузки:
$ query = "INSERT INTO count1 (name, count) VALUES('$file', '1')ON DUPLICATE KEY UPDATE count=(count+1)" ;Итак, первым делом, проверяем, тип файла, то есть, определяем его расширение (используя функцию substr()), и используя функцию in_array, проверяем, есть ли в массиве допустимых типов ячейка с найденным расширением. Затем проверяем, существует ли в папке files запрашиваемый файл (данную проверку нужно выполнять, так как пользователь может вручную обратиться к файлу download.php и передать ему произвольный файл).
Далее выполняем соединение с базой данных и формируем SQL запрос для подсчета количества скачивания файла. Обратите внимание, какой мы используем запрос:
$ query = "INSERT INTO count1 (name, count) VALUES('$file', '1') ON DUPLICATE KEY UPDATE count=(count+1)" ;Бесплатный курс по PHP программированию
Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC
В курсе 39 уроков | 15 часов видео | исходники для каждого урока
Теперь можно проверить работоспособность скрипта.
Вариант 2
Для второго варианта нам также потребуется таблица в базе данных. Поэтому создадим таблицу count2:
name – поле для хранения имени файла (тип данных String). Опять же данному полю необходимо присвоить индекс UNIQUE, так как имена файлов, должны быть уникальными;
id – идентификатор таблицы (тип данных Integer), а значит и идентификатор каждого добавленного файла (атрибут AUTO INCREMENT индекс PRIMARY KEY).
count – количество скачивания файла (тип данных Integer). Значение данного поля по умолчанию – 1.
SQL запрос для создания данной таблицы:
) ENGINE = InnoDB DEFAULT CHARSET = utf8 AUTO_INCREMENT = 1 ;По логике работы данного скрипта, перед тем как вывести доступные файлы для скачивания, необходимо занести информацию о них в базу данных. Таким образом, каждому файлу будет присвоен собственный уникальный идентификатор, который будет использоваться для указания того, какой именно файл пользователь скачивает.
Как обычно нам необходим файл конфигурации, который мы используем из предыдущего варианта данного скрипта. Так же создадим файл d_func.php, в котором будут описаны функции необходимые для работы скрипта. В файле d_func.php создадим две функции:
Первая функция connect() – взята из первого варианта скрипта. Интерес представляет вторая функция insert_file(), которая добавляет новый файл в базу данных. Аргументы, которые принимает функция: $db – дескриптор подключения к базе данных, $file – имя файла, $types – массив допустимых для скачивания файлов.
Перед тем как добавить информацию о файле в базу данных, выполним ряд проверок: не пустое ли имя файла, разрешается ли скачивание файла данного типа (аналогично первому варианту), а также существует ли указанный файл в папке files (константа DIR).
Затем формируем SQL запрос, по вставке данных в таблицу, при этом указываем ключевое слово IGNORE – то есть, отключаем формирование ошибок при вставке имени уже существующего файла. При этом вставка данных не произойдет. Далее выполняем запрос, и если не возникло ошибок, возвращаем истину.
Для получения информации о сохраненных файлах в базе данных, создадим функцию get_count(), логика ее работы аналогична первому варианту скрипта:
Теперь давайте создадим файл admin.php, с помощью которого можно добавить новый файл в базу данных и просмотреть уже существующие:
< meta http - equiv = "content-type" content = "text/html; charset=UTF-8" / >Как обычно вначале подключаем требуемые файлы и выполняем подключение к базе данных. Затем так как мы добавляем новый файл, используя обычную форму, значит как только придут данные методом POST – вызовем функцию insert_file(), то есть добавим новый файл в базу данных. Далее выполняем перенаправление, на эту же страницу, для очистки данных в суперглобальном массиве $_POST, и вызываем функцию get_count(), что бы просмотреть, какие файлы уже добавлены в базу данных и сколько раз их скачивали. Далее выводим файлы на экран в нужном формате, единственное, я добавил проверку наличия файла при его выводе на экран. Это нужно для того что бы, файлы которые действительно присутствуют в папке files – отображать зеленным цветом, в противном случае – красным.
Вот, что мы увидим на экране браузера, после добавления нескольких файлах.
Теперь давайте создадим страницу, на которой выведем ссылки для скачивания файлов (файл index.php):
< meta http - equiv = "content-type" content = "text/html; charset=UTF-8" / > < a href = "download.php?id= <?php echo $item [ 'id' ] ; ?> " > <?php echo $item [ 'name' ] ?> ( <?php echo $item [ 'count' ] ?> ) < / a > < br / >Как обычно путь ссылки формируем следующим образом – вначале указываем файл обработчик (который выполнит подсчет количества скачивания), затем передаем, используя GET параметры, идентификатор файла, который пытается скачать пользователь. Теперь создадим файл download.php:
Обратите внимание, логика работы данного файла полностью аналогична первому варианту. За исключением того, что через адресную строку передается идентификатор скачиваемого файла, а не его имя. Так как идентификатор – это число, значит проверим, является ли содержимое ячейки id суперглобального массива $_GET, числом. И если действительно это так – вызываем функцию update_count(). Поэтому в файле d_func.php опишем данную функцию:
Данная функция принимает в качестве параметров переменную $db – дескриптор подключения к базе данных и переменную $id – идентификатор скачиваемого файла. Первым делом необходимо убедиться, что файл с переданным идентификатором действительно существует в базе данных. При этом получим его имя. Далее проверяем наличие файла с определенным именем в папке загрузок – files. И если данный файл действительно существует – обновляем запись в таблице. А именно увеличиваем текущее значение поля count на единицу. Далее, используя функцию header(), отдаем файл пользователю на скачивание.
Давайте посмотрим, что у нас получилось:
Как Вы видите, все успешно работает. На этом данный урок завершен. Всего Вам доброго и удачного кодирования.
Бесплатный курс по PHP программированию
Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC
В курсе 39 уроков | 15 часов видео | исходники для каждого урока
Разработка веб-приложения на PHP
Создайте веб-приложение на PHP на примере приема платежей на сайте
Похожие статьи:
Комментарии Вконтакте:
Комментарии Facebook:
Комментарии (12)
Это конечно хорошо что вы так старательно пытаетесь все закрыть лишь бы народ подписался, когда в интернете столько информации, могли бы просто предложить а не насильно все закрыть.. Но давайте не об этом.
По теме, сохранить папку директории без полного пути разве это правильно ? А что если я поставлю весь этот код в не в корне сайта, а папку для скачивания в корне ?
В отличие от Яндекс.Метрики, в Google Analytics нет встроенного функционала отслеживания скачиваемых с вашего сайта файлов. Для этого необходимо размечать каждую ссылку соответствующим кодом события. А можно воспользоваться GTM и за 3 действия настроить отслеживание всех загружаемых файлов.
Начнем с Метрики. Чтобы определить, сколько раз посетители попытались (!) скачать с вашего сайта файлы (музыку, видео, документы и т.д.), нет необходимости в какой-либо настройки. Яндекс сам собирает статистику по скачиванию файлов, по умолчанию поддерживая большое количество расширений.
Для этого можно воспользоваться стандартным отчетом Загрузки файлов.
Отчеты - Стандартные отчеты - Содержание - Загрузки файлов
В нем содержатся данные по взаимодействиям пользователей с файлами, которые размещены на вашем сайте. Это могут файлы разного размера и формата. Например:
- музыка (.mp3);
- документы (.docx, .rtf);
- отчетность, таблицы (.xlsx);
- видео (.mp4, .mpeg, .mov);
- установочные файлы (.exe);
- фотографии (.jpg, .jpg, .jpg);
- книги (.djvu, .pdf);
- и т.д.
Если кто-то из посетителей захочет скачать что-то подобное на вашем сайте, Метрика зафиксирует это событие. По умолчанию поддерживается следующий список расширений: 3GP, 7Z, AAC, AC3, ACS, AI, AVI, APE, APK, ASF, BMP, BZ2, CAB, CDR, CRC32, CSS, CSV, CUE, DIVX, DMG, DJV, DJVU, DOC, DOCX, DOCM, DOCB, EMF, EPS, EXE, FLA, FLAC, FLV, GIF, GZ, TGZ, ISO, JPG, JPE, JPEG, JS, M3U, 3U8, M4A, M4V, MD5, MKV, MP3, MP4, MPG, MPEG, MOV, MSI, ODS, OGG, OGM, OGV, PDF, PHPS, PNG, PPT, PPTX, PPTM, PPTB, PSD, RAR, RSS, RTF, SEA, SIT, SFV, SHA1, SVG, SWF, TAR, TIF, TIFF, TORRENT, TS, TXT, VOB, WAV, WAVE, WEBM, WMA, WMV, WMF, XLS, XLSX, XLSM, XLSB,XPI,ZIP,GZIP
Вы можете передать в отчеты и другие расширения. Подробнее читайте в официальной справке Яндекса.
На скриншоте ниже представлен пример отчета Загрузки файлов по сайту моего курса по веб-аналитике, на котором размещена программа обучения в формате .pdf:
Отчет "Количество скачиваний" в Метрике
95 пользователей 117 раз переходило на ссылку с файлом analytics-pr.pdf . Данные в отчете сгруппированы по адресу, по которому расположен файл для скачивания.
В сводку Метрики также можно добавить виджет со статистикой по скачиваниям, выбрав при этом нужную сегментацию (например, по странице загрузки).
Настройка виджета в Метрике
Если Метрика умеет отслеживать загрузку файлов по умолчанию, то Google Analytics этим похвастаться не может. И чтобы зафиксировать взаимодействие пользователя с каким-либо файлом на вашем сайте, необходимо в код данного элемента добавить специальную конструкцию события.
Отслеживание скачивания файла
Сделать это можно, как минимум, тремя способами:
- с помощью события соответствующей конструкции для библиотеки Google Analytics;
- с помощью Autotrack;
- с помощью Google Tag Manager.
Разберем каждый из них.
С помощью события соответствующей конструкции для библиотеки Google Analytics
Читайте также: