Skip to content

⚡️ A blazing-fast, lightweight, and user-friendly tool built with Go for retrieving app information from major app stores.

Notifications You must be signed in to change notification settings

nightcodezero/katsini

Repository files navigation

Katsini - Get the latest app info from app stores




A blazing-fast, lightweight, and user-friendly tool built with Go for retrieving app information from major app stores.

made-with-Go CI Release codecov GitHub issues GitHub pull requests

🍕 Features

  • ⚡️ Blazingly fast — Lightning-quick app data retrieval powered by Go
  • 🛍️ Multi-store support — Fetch data from major app stores in one place
  • 🪶 Lightweight — Minimal resource footprint for efficient operation
  • 🐳 Containerized — Full Docker support for flexible deployment
  • 🔌 Simple API — Clean REST endpoints for seamless integration
  • 📝 Structured data — Consistent JSON output for all app stores
  • 🛠️ Easy setup — Get started in minutes with straightforward configuration

🛍️ Supported App Stores

🐳 Quick Start

  • Docker and Docker Compose must be installed on your machine.
  • Copy code below and save it as docker-compose.yml.
services:
  browser:
    image: chromedp/headless-shell
    ports:
      - "9222:9222"
    command: [
      "--no-sandbox",
      "--disable-gpu",
      "--remote-debugging-address=0.0.0.0",
      "--remote-debugging-port=9222",
      "--disable-extensions",
      "--enable-automation",
      "--disable-blink-features=AutomationControlled",
      "--incognito",
      "--user-agent=Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36"
    ]

  app:
    image: ghcr.io/nightcodezero/katsini:latest
    environment:
      CHROME_HOST: browser
      CHROME_PORT: 9222
    ports:
      - "8080:8080"
    depends_on:
      - browser
    links:
      - browser
  • Run docker-compose up to start the service.

🎉 That's it! You can now access the service at http://localhost:8080

📖 Usage

🛍️ Google Play Store

Example Request:

  • URL: http://localhost:8080/playstore
  • Method: GET
  • Query Parameter:
    • bundleId (REQUIRED): The app package name (e.g., com.mediocre.dirac).
    • lang (optional, defaults to `'en'): The two letter language code in which to fetch the app page.
    • country (optional, defaults to 'us'): The two letter country code used to retrieve the applications. Needed when the app is available only in some countries.
curl http://localhost:8080/playstore?bundleId=com.mediocre.dirac&lang=en&country=us

Example Response:

{
  "bundleId": "com.mediocre.dirac",
  "developer": "Mediocre",
  "title": "Beyondium",
  "updated": "31-10-2019",
  "url": "https://play.google.com/store/apps/details?id=com.mediocre.dirac&hl=en&gl=us",
  "version": "1.1.5"
}

🛍️ Apple App Store

Example Request:

  • URL: http://localhost:8080/appstore
  • Method: GET
  • Query Parameter:
    • appId or bundleId (REQUIRED):
      • appId: The unique identifier for the application in the Apple App Store. This can be found in the app's store URL after the /id<APP_ID> segment.
      • bundleId: The app package name (e.g., com.thinkdivergent).
    • country (optional, defaults to 'us'): The two letter country code used to retrieve the applications. Needed when the app is available only in some countries.
curl http://localhost:8080/appstore?appId=1592213654&country=us

Example Response:

{
  "appId": "1592213654",
  "bundleId": "com.thinkdivergent",
  "developer": "Think Divergent LLC",
  "title": "Think Divergent",
  "updated": "11-02-2023",
  "url": "https://apps.apple.com/us/app/think-divergent/id1592213654?uo=4",
  "version": "2.0.13"
}

🛍️ Huawei AppGallery

Example Request:

  • URL: http://localhost:8080/appgallery
  • Method: GET
  • Query Parameter:
    • appId (REQUIRED): The unique identifier for the application in the Huawei AppGallery. This can be found in the app's store URL after the /app/C<APP_ID> segment.
curl http://localhost:8080/appgallery?appId=100102149

Example Response:

{
  "appId": "100102149",
  "bundleId": "com.radio.fmradio",
  "developer": "RADIOFM",
  "title": "Radio FM",
  "updated": "05-11-2024",
  "url": "https://appgallery.huawei.com/app/C100102149",
  "version": "6.5.6"
}

⚡ Benchmarks

The benchmarks were run using the following command:

go test -bench=. -benchtime=1s -benchmem -cpu=1

The results of the benchmarks are as follows:

goos: linux
goarch: amd64
pkg: github.com/nightcodezero/katsini
cpu: 12th Gen Intel(R) Core(TM) i7-12700
BenchmarkGooglePlayStore  	       2	 811015314 ns/op	 3816876 B/op	   21807 allocs/op
BenchmarkAppleAppStore    	      64	  18702830 ns/op	   95091 B/op	     163 allocs/op
BenchmarkHuaweiAppGallery 	       2	 892189872 ns/op	 2685124 B/op	   15531 allocs/op

The benchmark results show the average time taken and how many iterations were run per operation can be done in a second.

  • Note: The benchmarks were run on a 12th Gen Intel(R) Core(TM) i7-12700 CPU and using a single CPU core.
  • 2 : The number of iterations run per operation.
  • ns/op : The average time taken for each operation.
  • B/op : The average number of bytes allocated per operation.
  • allocs/op : The average number of memory allocations per operation.

🔋 Uses

Here are some of the libraries that are used in this project:

  • Chromedp - A faster, simpler way to drive browsers in Go.

About

⚡️ A blazing-fast, lightweight, and user-friendly tool built with Go for retrieving app information from major app stores.

Resources

Stars

Watchers

Forks

Packages