tonykang22 / hello-world-auto-store

3 stars 1 forks source link

[product-analyzer] CloudFunctions for Itemscout #235

Closed tonykang22 closed 1 year ago

tonykang22 commented 1 year ago

CloudFunctions for Itemscout

개요

tonykang22 commented 1 year ago

Python Code

Example

from flask import Flask, Response, request
import requests
import json

app = Flask(__name__)

@app.route('/item', methods=['POST'])
def item():
   params = request.get_json()['data']
   result = []

   for element in params:
      try:
         result.append(get_item_scout_indicator(element))
      except Exception:
         continue

   result_dict = [indicator.__dict__ for indicator in result] 
   return Response(json.dumps({'data': result_dict}), mimetype='application/json')

def get_item_scout_indicator(search_word): 
   item_id = get_item_scout_item_id(search_word)
   raw_indicator = get_item_scout_general(item_id)
   coupang_indicator = get_item_scout_coupang(item_id)
   final_indicator = map_indicator(search_word, raw_indicator, coupang_indicator)
   return final_indicator

def get_item_scout_item_id(search_word):
   search_format = {'keyword':search_word}
   response = requests.post('https://api.itemscout.io/api/keyword', json=search_format)
   return response.json()['data']

def get_item_scout_general(item_id):
   response = requests.get('https://api.itemscout.io/api/v2/keyword/stats/' + str(item_id))
   return response.json()['data']

def get_item_scout_coupang(item_id):
   response = requests.get('https://api.itemscout.io/api/v2/keyword/coupang_stats/' + str(item_id))
   return response.json()['data']

def map_indicator(search_word, raw_indicator, coupang_indicator):
   item = ItemScoutIndicatorDto()
   item.search_term = search_word
   item.intensity_of_competition = raw_indicator['competitionIntensity']
   item.coupang_competition_score = coupang_indicator['coupangCompetitionScore']
   item.proportion_of_overseas_products = raw_indicator['overseaProductPercent']
   item.proportion_of_actual_purchase = raw_indicator['soldProductPercent']
   item.coupang_average_price = raw_indicator['averagePrice']
   item.average_price = coupang_indicator['coupangAveragePrice']
   return item

class ItemScoutIndicatorDto:
    def __init__(self):
        self.search_term = ""
        self.intensity_of_competition = 0.0
        self.coupang_competition_score = 0.0
        self.proportion_of_overseas_products = 0.0
        self.proportion_of_actual_purchase = 0.0
        self.coupang_average_price = 0.0
        self.average_price = 0.0
        self.related_keywords = []



Response Example

{
    "data": [
        {
            "search_term": "장난감",
            "intensity_of_competition": 247.53,
            "coupang_competition_score": 20,
            "proportion_of_overseas_products": 5,
            "proportion_of_actual_purchase": 87.5,
            "coupang_average_price": 40006,
            "average_price": 19616.39,
            "related_keywords": []
        },
        {
            "search_term": "아이패드",
            "intensity_of_competition": 6.55,
            "coupang_competition_score": 80,
            "proportion_of_overseas_products": 15,
            "proportion_of_actual_purchase": 32.5,
            "coupang_average_price": 807981,
            "average_price": 1147755.14,
            "related_keywords": []
        },
        {
            "search_term": "노트북",
            "intensity_of_competition": 77.53,
            "coupang_competition_score": 40,
            "proportion_of_overseas_products": 0,
            "proportion_of_actual_purchase": 72.5,
            "coupang_average_price": 1230986,
            "average_price": 793544.17,
            "related_keywords": []
        },
        {
            "search_term": "모기향",
            "intensity_of_competition": 24.15,
            "coupang_competition_score": 60,
            "proportion_of_overseas_products": 0,
            "proportion_of_actual_purchase": 82.5,
            "coupang_average_price": 5367,
            "average_price": 17980.56,
            "related_keywords": []
        }
    ]
}