Wyszukiwanie kolorów w sklepie internetowym

Większość sklepów internetowych ma zwykłą, prostą wyszukiwarkę. Wpisuje się wtedy jakiś wyraz lub frazę, a sklep przeszukuje produkty biorąc pod uwagę pod uwagę nazwę i opis produktu. Zwykle wystarcza to aby znaleźć poszukiwany przedmiot.

Często przy prostej wyszukiwarce jest link do wyszukiwania zaawansowanego, gdzie dodatkowo możemy zdefiniować zakres cenowy czy ograniczyć wyszukiwanie do wybranej kategorii.

Nigdy nie sprawdzałem tego w badaniach, ale zawsze wydawało mi się, że z wyszukiwania zaawansowanego korzysta niewielka liczba osób. Dlatego gdy w Kadoro zrobiliśmy wyszukiwanie zaawansowane, postawiłem sobie za cel analizę jak często użytkownicy korzystają z dodatkowych opcji wyszukiwania.

Tutaj należy się jednak drobna uwaga - zamiast odnośnika do wyszukiwania zaawansowanego, w naszym sklepie opcje te są zawsze widoczne na ekranie, po prawej stronie. Z założenia miały być niejako “pod ręką” co na pewno ma jakiś wpływ na częstotliwość korzystania z tej funkcji.

Dodatkowe opcje wyszukiwania w Kadoro to rozmiar, kształt, kategoria i kolor.

Wyniki badania

Ponieważ prezentacja samych wartości procentowych nic zwykle nie mówi, a w ten sposób można zafałszować rzeczywistość, publikuję również dane liczbowe.

Analiza obejmowała okres od 2008-09-08 do 2008-10-29. W tym czasie:

  • wyszukiwarka została użyta 13622 razy (ok. 267 razy dziennie)
  • liczba wyszukiwań kolorów wyniosła 3153
  • liczba wyszukiwań w wybranej kategorii wyniosła 2354
  • liczba wyszukiwań kształtu wyniosła 1787
  • liczba wyszukiwań rozmiaru wyniosła 897

Biorąc pod uwagę wartości procentowe, wychodzi na to, że:

  • kolor został wybrany w 23% przypadków
  • kategoria została wybrana w 17% przypadków
  • kształt został wybrany w 13% przypadków
  • rozmiar został wybrany w 6% przypadków

Jak widać liczba osób korzystająca z dodatkowych opcji nie jest wcale znikoma. Warto więc rozbudować wyszukiwarkę sklepową o dodatkowe opcje, oczywiście o ile asortyment sklepu pozwala na definiowanie takich cech oraz sprzedajemy więcej niż 200-300.

Wyszukiwarka zaawansowana dla 50 pozycji raczej mija się z celem, chociaż mogą być bardzo specyficzne branże gdzie zawężenie produktów ułatwi nawigację i pomoże w podjęciu decyzji.

Początkowy nakład pracy związany z koniecznością przypisania odpowiednich cech do produktów powinien zwrócić się w postaci bardziej zadowolonych i powracających klientów.

Backup serwera www c.d.

Pisałem poprzednio o wykonywaniu kopii plików na serwerze współdzielonym. Rozwiązanie które podałem sprawdza się jednak gdy mamy dostęp do shella, ale z doświadczenia wiem że sytuacje takie są sporadyczne.

Napisałem więc skrypt, który robi praktycznie to samo wykorzystując jednak wbudowaną w PHP obsługę archiwów ZIP. Wykorzystałem do tego celu bibliotekę pclzip.lib.php dzięki której w łatwiejszy sposób można tworzyć pliki ZIP.

Skrypt backup-zip-full.php wykonuje pełną kopię wskazanego katalogu wraz z podkatalogami.

<?php
set_time_limit(0);
require_once(’pclzip.lib.php’);
$bdata=date(’Y-m’).’/';
$btime=date(’Y-m-d_H-i’);
if (!is_dir(’../_backups/’)) mkdir(’../_backups/’);
if (!is_dir(’../_backups/’.$bdata)) mkdir(’../_backups/’.$bdata);
$archive = new PclZip(’../_backups/’.$bdata.’archive_full_’.str_replace(’.', ‘_’, $_GET['d']).’_’.$btime.’.zip’);
$v_dir = ‘/www/directory/’.$_GET["d"];

$v_remove = $v_dir;
if (substr($v_dir, 1,1) == ‘:’) $v_remove = substr($v_dir, 2);
$v_list = $archive->create($v_dir, PCLZIP_OPT_REMOVE_PATH,  $v_remove);
if ($v_list == 0) die(”Error : “.$archive->errorInfo(true));

?>
OK

Wywołanie jest z parametrem d, np.backup-zip-full.php?d=kadoro co oznacza spakowanie wybranego katalogu. Po wykonaniu pliku w katalogu ../backups/(bieżąca data) znajdziemy gotowe archiwum o nazwie np. archive_full_kadoro_pl_2008-10-03_15-17.zip

Wywołanie z parametrem zastosowałem ponieważ w zależności od ustawień serwera skrypt może działać jedynie określony czas, np. 30 lub 60 sekund po czym zakończy swoje działanie. Metoda ta może zatem być nieskuteczna dla wielkich katalogów. Mi bez problemu udało się uzyskać archiwum o wielkości 70 MB, a dzięki archiwizacji poszczególnych katalogów wszystkie archiwa zajęły ponad 300 MB.

Drugi ze skryptów działa na podobnej zasadzie, przy czym tworzy kopie przyrostowe. Data ostatniej archiwizacji zapisywana jest jako TIMESTAMP w pliku ../_backups/last-www-backup.txt

Skrypt backup-zip-incremental.php:

<?php
set_time_limit(0);

require_once(’pclzip.lib.php’);
$bdata=date(’Y-m’).’/';
$btime=date(’Y-m-d_H-i’);
if (!is_dir(’../_backups/’)) mkdir(’../_backups/’);
if (!is_dir(’../_backups/’.$bdata)) mkdir(’../_backups/’.$bdata);
$archive = new PclZip(’../_backups/’.$bdata.’archive_incremental_’.str_replace(’.', ‘_’, $_GET['d']).’_’.$btime.’.zip’);

$fname = ‘../_backups/last-www-backup.txt’;
if (!file_exists($fname))
{
$handle = fopen($fname, “w”);
fwrite($handle, time());
fclose($handle);
}
else
{
$handle = fopen($fname, “r”);
$GLOBALS['org_mtime'] = fread($handle, filesize($fname));
fclose($handle);
}

function myPreAddCallBack($p_event, &$p_header)
{
$info = pathinfo($p_header['stored_filename']);
if ($p_header['mtime'] <= $GLOBALS['org_mtime']) return 0;
else return 1;
}
$v_dir = ‘/www/directory/’.$_GET["d"];

$v_remove = $v_dir;
if (substr($v_dir, 1,1) == ‘:’) $v_remove = substr($v_dir, 2);
$v_list = $archive->create($v_dir, PCLZIP_CB_PRE_ADD, ‘myPreAddCallBack’, PCLZIP_OPT_REMOVE_PATH,  $v_remove);

if ($v_list == 0) die(”Error : “.$archive->errorInfo(true));

$handle = fopen($fname, “w”);
fwrite($handle, time());
fclose($handle);
?>
OK

Wywołanie pliku jest podobne jakw pierwszym przypadku tj. backup-zip-incremental.php?d=kadoro- plik z archiwum będzie miał nazwę archive_incremental_kadoro_pl_2008-10-03_15-26.zip

W razie jakochkowleik pytań zachęcam do kontaktu lub zostawienia komentarza.

Backup serwera www

Jakiś czas temu stanąłem przed problemem tworzenia samodzielnych kopii własnego konta na wykupionych serwerze. Oczywiście usługodawcy zapewniają automatyczne tworzenie takich backupów, ale
1. przezorny zawsze zabezpieczony
2. niejednokrotnie czytałem żale internautów że po awarii dysków okazywało się że serwerownia nie ma aktualnych kopii lub również je utraciła

Głównym założeniem było przechowywanie w miarę aktualnych danych na dysku lokalnym zawartości serwera.

Ponieważ nie mam serwera dedykowanego, a serwisy utrzymuję na zwykłym hostingu współdzielonym, zwykłe panele nie udostępniają takich funkcjonalności. Na szczęście w firmie Progreso dostaje się dostęp do shella, co pozwala uruchamiać programy bezpośrednio na serwerze.

Początkowo robiłem pełną kopię całego konta zipując wszystko do jednego pliku (co niestety zajmowało kilkaset MB) i kopiowałem na dysk lokalny. Plik który tworzy pełną kopię wygląda następująco (nazwałem go tool_backup_full.sh):

#!/bin/bash
mkdir backupy
bdata=`(date +%Y-%m-%d)`
mkdir backupy/$bdata
zip -r -1 backupy/$bdata/backup_full_$(date +%Y-%m-%d–%H-%M) public_html

Rozwiązanie to ma tę wadę, że za każdym razem tworzy pełną kopię, co w moim przypadku oznaczało ponad 500MB które później musiałem kopiować lokalnie. Dlatego udało mi się napisać skrypt, który będzie robił kopię przyrostową. Po dodaniu tego skryptu do crona okazało się, że dzienny przyrostowy backup zajmuje nie więcej jak kilka MB.

A skrypt który nazwałem tool_backup_incremental.sh wygląda następująco:

#!/bin/bash
mkdir backupy
bdata=`(date +%Y-%m-%d)`
bdata2=`(date +%m%d%Y)`
mkdir backupy/$bdata
if [ -e backupy/last-www-backup.txt ]
then
data_z_pliku=`cat backupy/last-www-backup.txt`
zip -r -1 -t $data_z_pliku backupy/$bdata/backup_incremental_$(date +%Y-%m-%d–%H-%M) public_html
else
echo “Nie masz pliku z backupem”
fi
echo $bdata2 > backupy/last-www-backup.txt

Plik last-www-backup.txt zawiera przykładowo
08062008
czyli datę ostatniej kopii.

Innym rozwiązaniem jest zastosowanie rsync - programu do synchronizacji, ale przeznaczony jest on do linkusa, a ja na codzień pracuję na WIndowsa XP. Ewentualnie można próbować wykorzystać jeden z rozmaitych programów do tworzenia kopii pod Windows, ale mi nie udało się znaleźć takiego, który dobrze zrobi backup przyrostowy z FTP.

Problem jednak pozostaje w przypadku serwerów bez dostępu do shella czyli w zdecydowanej większości. Jeśli uda mi się znaleźć na to rozwiązanie, również napiszę o tym.

Spotkanie Allegro 2008

Podobnie jak rok temu, tak w teraz wybrałem sie na Spotkanie Allegro w Poznaniu. Tym razem z Olą.

Poziom wykładów był zróżnicowany, wiele dla początkujących, kilka dla bardziej zaawansowanych.
Dzięki stoiskom konsultantów z Allegro można się było uzyskać nieco informacji, a i obecność różnych dodatkowych podmiotów handlowych się przydała (Izba Skarbowa, Traffica, Ceneo, PIT.pl, InsERT).

Organizacja - bardzo dobra, szczególnie biorąc pod uwagę że zjawiło się ok. 2000 osób.

Tak jak w ubiegłym roku Allegro zapewniło catering (ciastka, drożdżówki, ciepły posiłek, woda, kawa i herbata), w piątek wieczorem rozrywkę dla mężczyzn (ćwierćfinał Euro 2008 na dużym ekranie) jak i dla kobiet (film “Dziewczyna z perłą”). W sobotę za to odbył się koncert Morcheeby i Manic Street Preachers.

A to wszystko za 60 zł / 2 dni.

Dla tych co nie byli: program spotkania, nieco zdjęć z imprezy.

Automatyczne wystawianie na Allegro via WebAPI

Czego złego by nie mówić o Allegro to jedno trzeba przyznać - nie ma w Polsce sensownej konkurencji. Allegro ma większość tortu aukcyjnego, nawet gdy dominuje tam opcja “Kup teraz” zamiast tradycyjnej licytacji.

Dlatego w Kadoro od początku postrzegaliśmy portal ten jako jeden z kanałów sprzedaży (akceptując wysokie koszty wystawienia i prowizji). Biorąc jednak pod uwagę dość duży asortyment (obecnie ok. 1700 aktywnych produktów) swoistą mordęgą było ręczne wystawianie aukcji, nawet z szablonu. Dlatego dość szybko należało zaznajomić się z allegrowym WebAPI i gdy tylko moduł do wystawiania aukcji był gotowy, odetchnąłem z ulgą. Czas potrzebny na wystawienie przedmiotu skrócił się z 3 minut (tyle bowiem wcześniej trwało ręczne wystawianie) do 3 sekund (tyle trwa obecnie, z czego większość czasu trwa łączenie z serwerem aukcyjnym).

Obecnie mamy ponad 1250 trwających aukcji. Gdybyśmy kiedyś chcieli wystawiać taką ilość, zajęłoby to prawie 8 dni (pracując bez przerwy 8 godzin dziennie). W tej chwili wystawienie takiej ilości zajmuje ok. 1 godziny. A w ciągu miesiąca w Kadoro przybywa 100-200 produktów.

Po drodze pojawiło się kilka mniejszych problemów, które na szczęście udało się rozwiązać:

  • tytuł aukcji nie może mieć więcej jak 50 znaków, podczas gdy w sklepie mamy produkty o nazwie “Koral Desert Sun biały prostopadłościan 10×6 mm posrebrzany - 4 sztuki”
  • cena aukcji nie może być niższa od 1 zł - a w sklepie wiele przedmiotów jest po 30, 40 gr.
  • Allegro ma własną strukturę kategorii, różną od tego co mamy u siebie

Polecam zaznajomić się z WebAPI wszystkim właścicielom sklepów, którzy planują lub chcą rozpocząć sprzedaż na Allegro i mają spory asortyment.