Skip to content

Integrate the websites you want and crawl them all. Create your own product catalog by auto combining products from different websites.

Notifications You must be signed in to change notification settings

FastnTech/shopcrawler

Repository files navigation

Shop Crawler

Komutlar

Typescript'i build etmek için

npm run build

Sürekli build için

npm run watch:build

Build sonrası alt mağazaları crawl etmek için

npm run subshops

Build sonrası Hepsiburadayı crawl etmek için

npm run mainshop

Testleri çalıştırmak için

npm run test

Jest global yüklenmezse npx den testleri çalıtırmak için

npm run test-npx

Abstract

Yeni eklenecek her mağaza(n11, hepsiburada vb) Shop classından extend edilmelidir. Oluşturulacak olan class yeni bir dosya içerisinde shops klasörü altına alınmalıdır. İçerisinde doldurulması gereken en önemli fonksiyonlar: getRelatedProductsFromSearching, getProductDetailFromProductPage. Bu fonksiyonların örnekleri shops/Hepsiburada.ts ve shops/n11.ts içerisinde bulunuyor. Fonksiyonun amacı ve aldığı parametrelerin ne oldukları ile ilgili bilgi almak için abstract class ın içerisinde fonksiyonlara ait Hint kısımları incelenebilir.

Shopların bazı tekil ve ufak değişkenleri bulunuyor. Bunlar shopId, shopUrl ve shopName.

shopId Diğer shoplardan da görebileceğimiz üzere mağazanın slug olarak yazılmış hali diyebiliriz.

shopUrl Mağaza URL'i

shopName Mağaza Adı


Fonksiyonlar

Shop kendi içerisinde yardımcı fonksiyonlar barındırıyor. Fonksiyon Hintleri ile ne işe yaradıklarını rahatlıkla anlayabiliriz. Ancak burada tekrar hepsini gözden geçirelim.

Fonksiyon Açıklama
checkAttrs Ürünler farklı mağazardan çekilip eşleştirilme aşamasına geldiğinde direkt olarak attributes objesi altında bulunan özellikler ile karşılaştırmaya tabi olur. Bu fonksiyon iki ürünün attributelerini alarak eşleştiğine dair bir boolean objesi döndürür.
objectToProduct verilen objeyi parçalayarak IProduct objesine çevirir.
arrayToProductList verilen obje listesini parçalayarak IProduct[] objesine çevirir.
createShopProductFromProduct verilen IProduct objesini ShopProduct objesine çevirir.
slugify verilen text i slug a çevirir
sleep puppeteer pageleri için bir duraklatma sağlar
getAllProductsFromDatabase veritabanında bulunan tüm ürünleri çeker
getProductsFromDatabase sadece Shop a ait ürünleri çeker


Entities ve Models

./src/entities/ klasörü altında veritabanında bulunacak obje verilerinin şemaları bulunuyor.

ShopProduct ürünlerimizin bulunduğu, ShopCategory ise kategorilerimizin bulunduğu entity.

./src/models/ klasörü altında işlemlerimizi gerçekleştirdiğimiz modellerimiz bulunuyor. ShopProduct içerisinde bulunan subProducts attribute u Product modellerini kapsayan bir array.

Bir ürün öncelikle main olarak eklenir ShopProduct. Ardından tüm Shop özellikleri ile birlite eklenen ürünün subProducts attribute üne eklenir.

Diğer mağazalardan eklenecek olan her ürün eşleşen bir main ürünü varsa o ürünün subProducts ına eklenir. Harici bir ürün olarak eklenmez. Bu şekilde ürün bütünlüğü sağlanmış olur.