class RecombeeTest( unittest.TestCase ): def __init__(self, *args, **kwargs): super(RecombeeTest, self).__init__(*args, **kwargs) self.client = RecombeeClient('client-test', 'jGGQ6ZKa8rQ1zTAyxTc0EMn55YPF7FJLUtaMLhbsGxmvwxgTwXYqmUk5xVZFw98L') def setUp(self): self.client.send(ResetDatabase()) batch = Batch([ AddItem('entity_id'), AddUser('entity_id'), AddSeries('entity_id'), AddGroup('entity_id'), InsertToGroup('entity_id', 'item', 'entity_id'), InsertToSeries('entity_id', 'item', 'entity_id', 1), AddItemProperty('int_property', 'int'), AddItemProperty('str_property', 'string'), SetItemValues('entity_id', {'int_property': 42, 'str_property': 'hello'}), AddUserProperty('int_property', 'int'), AddUserProperty('str_property', 'string'), SetUserValues('entity_id', {'int_property': 42, 'str_property': 'hello'}) ]) self.client.send(batch)
def offer(request, offer_id): offer = Product.objects.all().filter(id=offer_id, is_offer=True) reviews = ProductsReview.objects.all().filter(product=offer_id) context = { 'offer': offer, 'reviews': reviews, } client = RecombeeClient( 'e-market-dev', 'S1HpoVU0JuxtjU9ewtvSnAUQh4qgKHTjr2DFbQ30LoADU2S27OsleTi1C23TNVEm') current_user = request.user r = AddDetailView(current_user.id, offer_id, cascade_create=True) client.send(r) recommended = client.send( RecommendItemsToItem(offer_id, current_user.id, 3)) related = recommended['recomms'] related_products_id = [] for r in related: related_products_id.append(r['id']) related_products = [] for id in related_products_id: prod = Product.objects.all().filter(id=id) related_products.append(prod) context['suggested_offers'] = related_products return render(request, 'listings/offer.html', context)
def main(): load_dotenv(dotenv_path='.env') elastic_search_host = os.getenv("ELASTIC_SEARCH_HOST") es = Elasticsearch([elastic_search_host], use_ssl=False) client = RecombeeClient(os.getenv("RECOMBEE_DATABASE_ID"), os.getenv("RECOMBEE_PRIVATE_TOKEN")) num_recipes = es.count(index=os.getenv("ELASTIC_SEARCH_INDEX"), body={"query": { "match_all": {} }})["count"] recipes = scan(client=es, index=os.getenv("ELASTIC_SEARCH_INDEX"), query={"query": { "match_all": {} }}, size=BATCH_SIZE, scroll='1ms') requests = [ SetItemValues(recipe['_id'], { 'title': recipe['_source']['title'], 'ingredients': recipe['_source']['ingredients'], 'link': recipe['_source']['link'], 'image': recipe['_source']['image'], 'tags': recipe['_source']['tags'], 'total_time': recipe['_source']['total_time'], 'rating': recipe['_source']['rating'], 'time_acquired': recipe['_source']['time_acquired'], }, cascade_create=True) for recipe in recipes ] client.send(Batch(requests))
def listing(request, product_id): if (request.method == 'POST'): if (request.POST['star1'] == 'active'): stars = 1 elif (request.POST['star2'] == 'active'): stars = 2 elif (request.POST['star3'] == 'active'): stars = 3 elif (request.POST['star4'] == 'active'): stars = 4 elif (request.POST['star5'] == 'active'): stars = 5 #if user didn't make any rating else: stars = 0 review = request.POST['review'] # product = Product.objects.all().filter(id=product_id) product_review = ProductsReview.objects.create(product_id=product_id, user_id=request.user.id, review=review, rating=stars) submit_product_review(product_id) product = Product.objects.all().filter(id=product_id) reviews = ProductsReview.objects.all().filter(product=product_id) client = RecombeeClient( 'e-market-dev', 'S1HpoVU0JuxtjU9ewtvSnAUQh4qgKHTjr2DFbQ30LoADU2S27OsleTi1C23TNVEm') current_user = request.user if (current_user.is_authenticated): current_user_id = current_user.id else: current_user_id = 0 r = AddDetailView(current_user_id, product_id, cascade_create=True) client.send(r) recommended = client.send( RecommendItemsToItem(product_id, current_user_id, 3)) related = recommended['recomms'] related_products_id = [] for r in related: related_products_id.append(r['id']) related_products = [] for id in related_products_id: prod = Product.objects.all().filter(id=id) related_products.append(prod) # for prod in recommended: # print(f"prod {prod}") avg_rating = get_avg_rating(product_id) context = { 'product': product, 'reviews': reviews, 'avg_rating': round(avg_rating, 1), 'related_products': related_products, } return render(request, 'listings/listing.html', context)
def update_item(request): #data mining setup client = RecombeeClient( 'e-market-dev', 'S1HpoVU0JuxtjU9ewtvSnAUQh4qgKHTjr2DFbQ30LoADU2S27OsleTi1C23TNVEm') data = json.loads(request.body) productId = data['productId'] action = data['action'] current_user = request.user product = Product.objects.get(id=productId) product.sold = product.sold + 1 product.save() order, created = Order.objects.get_or_create(user=current_user, complete=False) orderItem, created = OrderItem.objects.get_or_create(order=order, product=product) if (action == 'add'): print(f"usre ID: {current_user.id}, product ID: {product.id}") r = AddPurchase(current_user.id, product.id, timestamp=time.time(), cascade_create=True) client.send(r) orderItem.quantity = (orderItem.quantity + 1) product.quantity = (product.quantity - 1) if (product.quantity <= 0): product.in_stock = False product.save() else: product.quantity = product.quantity - 1 product.save() elif (action == 'remove'): orderItem.quantity = (orderItem.quantity - 1) product.quantity = (product.quantity + 1) product.save() orderItem.save() if (orderItem.quantity <= 0): orderItem.delete() print(f'Action: {action}, productId: {productId}') return JsonResponse('Item was added', safe=False)
def index(request): categories = Category.objects.all() product = Product.objects.all() current_user = request.user client = RecombeeClient( 'e-market-dev', 'S1HpoVU0JuxtjU9ewtvSnAUQh4qgKHTjr2DFbQ30LoADU2S27OsleTi1C23TNVEm') prods = Product.objects.order_by('-sold')[:6] best_sellers = sorted(prods, key=operator.attrgetter('sold'), reverse=True) print(f"best_sellers: {best_sellers}") context = { 'categories': categories, 'best_sellers': best_sellers, } # recomender # if (request.user.is_authenticated): # print("auth") if (not request.user.is_authenticated): current_user_id = 0 else: current_user_id = current_user.id recommended = client.send( RecommendItemsToUser(current_user_id, 5, cascade_create=True)) # print(recommended) client = RecombeeClient( 'e-market-dev', 'S1HpoVU0JuxtjU9ewtvSnAUQh4qgKHTjr2DFbQ30LoADU2S27OsleTi1C23TNVEm') current_user = request.user recommended = client.send(RecommendItemsToUser(current_user_id, 3)) print(f"Related products: {recommended}") suggested = recommended['recomms'] suggested_products_id = [] for r in suggested: suggested_products_id.append(r['id']) suggested_products = [] for id in suggested_products_id: prod = Product.objects.all().filter(id=id) suggested_products.append(prod) print(f"related: {suggested_products}") context['suggested_products'] = suggested_products return render(request, 'pages/index.html', context)
def get(self, user_id): _ = get_token_info() client = RecombeeClient( 'globalhack', 'QluRxG1ZkI3kRKvukeXpscV4kRcTxIPAIYbxVjlD14FJlhS0rLdVYVxv25NNeBYC') try: # get the recommendation response = client.send(RecommendItemsToUser(user_id, 5)) return make_response(jsonify(response)) except Exception: abort(status.HTTP_500_INTERNAL_SERVER_ERROR)
def post(self, user_id, service_id): _ = get_token_info() client = RecombeeClient( 'globalhack', 'QluRxG1ZkI3kRKvukeXpscV4kRcTxIPAIYbxVjlD14FJlhS0rLdVYVxv25NNeBYC') request = AddPurchase(user_id, service_id, cascade_create=True) purchase_requests = [request] try: # Send the data to Recombee, use Batch for faster processing of larger data response = client.send(Batch(purchase_requests)) return make_response(jsonify(response)) except Exception: abort(status.HTTP_500_INTERNAL_SERVER_ERROR)
class RecombeeTest(unittest.TestCase): def __init__(self, *args, **kwargs): super(RecombeeTest, self).__init__(*args, **kwargs) db_id = os.environ.get('DB_ID') if db_id is None: raise MissingEnvironmentVariable('DB_ID env var must be specified') token = os.environ.get('PRIVATE_TOKEN') if token is None: raise MissingEnvironmentVariable( 'PRIVATE_TOKEN env var must be specified') self.client = RecombeeClient(db_id, token, region=Region.EU_WEST) def setUp(self): self.client.send(ResetDatabase()) while True: try: self.client.send(ListItems()) except ResponseException as e: # Wait until DB is erased continue break batch = Batch([ AddItem('entity_id'), AddUser('entity_id'), AddSeries('entity_id'), AddGroup('entity_id'), InsertToGroup('entity_id', 'item', 'entity_id'), InsertToSeries('entity_id', 'item', 'entity_id', 1), AddItemProperty('int_property', 'int'), AddItemProperty('str_property', 'string'), SetItemValues('entity_id', { 'int_property': 42, 'str_property': 'hello' }), AddUserProperty('int_property', 'int'), AddUserProperty('str_property', 'string'), SetUserValues('entity_id', { 'int_property': 42, 'str_property': 'hello' }) ]) self.client.send(batch)
def push_zion(database, token, prod_list, user, timestamp=False): items = get_global_dic(prod_list, user) print(items) client = RecombeeClient(database, token) if timestamp: requests = [] for item in items: r = AddPurchase(item['user_id'], item['item_id'], timestamp=item['timestamp'], cascade_create=True) client.send(r) requests = [] for item in items: r = AddDetailView(item['user_id'], item['item_id'], timestamp=item['timestamp'], cascade_create=True) requests.append(r) br = Batch(requests) client.send(br) else: requests = [] for item in items: r = AddPurchase(item['user_id'], item['item_id'], cascade_create=True) client.send(r) requests = [] for item in items: r = AddDetailView(item['user_id'], item['item_id'], cascade_create=True) requests.append(r) br = Batch(requests) client.send(br) print('Done')
from recombee_api_client.api_client import RecombeeClient from recombee_api_client.api_requests import * import csv client = RecombeeClient('wt-proj', 'gVEMJ5zdYOleXwlX4MyCtExwaa8MgAFgejz0W7TPa8kB1Qebtp1t0OvESDDdwrmO') purchases = [] with open('purchaseRecord.csv') as csvfile: csvreader = csv.reader(csvfile) for row in csvreader: user_id = row[0] item_id = row[1] r = AddPurchase(user_id, item_id, cascade_create = True) purchases.append(r) br = Batch(purchases) print(br) client.send(br) recommended = client.send(UserBasedRecommendation('0', 5)) print(recommended)
from recombee_api_client.api_client import RecombeeClient from recombee_api_client.exceptions import APIException from recombee_api_client.api_requests import * client = RecombeeClient( 'university-of-jordan-dev', 'sMGOTwMPzOPM3l6Tmxs8jXZ2WeCskPR9dnzKrdBczJHy1vdRFQs9HldcLPC8W63N') result = client.send(ListItems(filter="\'Brand\'== \"Gap\"")) item_img = { 'item_99': 'https://www.gap.com/webcontent/0018/101/739/cn18101739.jpg', 'item_98': 'https://www.gap.com/webcontent/0017/029/794/cn17029794.jpg', 'item_97': 'https://www.gap.com/webcontent/0017/341/330/cn17341330.jpg', 'item_96': 'https://www.gap.com/webcontent/0018/052/667/cn18052667.jpg', #is actually grey 'item_95': 'https://www.gap.com/webcontent/0018/306/804/cn18306804.jpg', 'item_94': 'https://www.gap.com/webcontent/0017/341/309/cn17341309.jpg', 'item_93': 'https://www.gap.com/webcontent/0017/667/434/cn17667434.jpg', 'item_92': 'https://www.gap.com/webcontent/0017/629/840/cn17629840.jpg', 'item_91': 'https://www.gap.com/webcontent/0017/818/317/cn17818317.jpg', 'item_90': 'https://www.gap.com/webcontent/0017/331/404/cn17331404.jpg', 'item_89': 'https://www.gap.com/webcontent/0018/191/012/cn18191012.jpg', 'item_88': 'https://www.gap.com/webcontent/0018/084/015/cn18084015.jpg', #item_87 sold out 'item_86': 'https://www.gap.com/webcontent/0017/667/550/cn17667550.jpg', 'item_85': 'https://www.gap.com/webcontent/0015/161/274/cn15161274.jpg', 'item_84': 'https://www.gap.com/webcontent/0018/032/751/cn18032751.jpg', 'item_83': 'https://www.gap.com/webcontent/0018/028/587/cn18028587.jpg', 'item_82': 'https://www.gap.com/webcontent/0018/028/638/cn18028638.jpg', 'item_81': 'https://www.gap.com/webcontent/0018/216/814/cn18216814.jpg',
from recombee_api_client.api_client import RecombeeClient from recombee_api_client.api_requests import * import csv from datetime import date client = RecombeeClient( 'sns', 'cqLZqZnboKlyVKS7EhhYYyM8BflGRDlizngZbljA3kp67tjd1FKfH3WaXLNSXl7F') # client.send(ResetDatabase()) client.send(AddItemProperty('title', 'string')) client.send(AddItemProperty('genre', 'set')) client.send(AddItemProperty('imdbId', 'string')) client.send(AddItemProperty('tmdbId', 'string'))
from recombee_api_client.api_client import RecombeeClient from recombee_api_client.api_requests import * import json import os # to access OS environment variables client = RecombeeClient(os.environ['DB_NAME'], os.environ['SECRET_TOKEN']) with open('static/dataset/movie_user_ratings.json') as fdata: interactions = json.loads(fdata.read()) requests = [] #interate through all interactions and create object for each interaction for interaction in interactions: r = AddRating(interaction['userid'], interaction['imdbid'], interaction['rating'], cascade_create=True) #making a list of interactions requests.append(r) br = Batch(requests) try: # Send the data to Recombee, use Batch for faster processing of larger data print('Send ratings') client.send(br) except APIException as e: print(e)
from recombee_api_client.api_client import RecombeeClient from recombee_api_client.api_requests import * import csv client = RecombeeClient( 'sns', 'cqLZqZnboKlyVKS7EhhYYyM8BflGRDlizngZbljA3kp67tjd1FKfH3WaXLNSXl7F') ratings = [] interaction = AddDetailView( "22", "96588", #optional parameters: ) ratings.append(interaction) try: print('sending') client.send(Batch(ratings)) print('Send') except APIException as e: print(e)
from recombee_api_client.api_client import RecombeeClient from recombee_api_client.api_requests import * import csv client = RecombeeClient( 'wt-proj', 'gVEMJ5zdYOleXwlX4MyCtExwaa8MgAFgejz0W7TPa8kB1Qebtp1t0OvESDDdwrmO') purchases = [] with open('purchaseRecord.csv') as csvfile: csvreader = csv.reader(csvfile) for row in csvreader: user_id = row[0] item_id = row[1] r = AddPurchase(user_id, item_id, cascade_create=True) purchases.append(r) br = Batch(purchases) print(br) client.send(br) recommended = client.send(UserBasedRecommendation('0', 5)) print(recommended)
from recombee_api_client.api_client import RecombeeClient from recombee_api_client.api_requests import AddItemProperty, SetItemValues, AddPurchase from recombee_api_client.api_requests import ItemBasedRecommendation, Batch, ResetDatabase import random import csv PROBABILITY_PURCHASED = 0.1 client = RecombeeClient( 'wt-proj', 'gVEMJ5zdYOleXwlX4MyCtExwaa8MgAFgejz0W7TPa8kB1Qebtp1t0OvESDDdwrmO') #Clear the entire database client.send(ResetDatabase()) # We will use courses as items # Courses have three properties # - domain (string) # - title (string) # - description (string) # Add properties of items client.send(AddItemProperty('domain', 'string')) client.send(AddItemProperty('title', 'string')) client.send(AddItemProperty('description', 'string')) # Prepare requests for setting a catalog of courses with open('courseCatalog.csv') as csvfile: csvreader = csv.reader(csvfile) for row in csvreader:
# 'recommId': '974edbca-4840-42d4-ae5e-63b2bcd0eba4'} recommended = client.send(RecommendItemsToItem(imdb_id[2:], str(user_id), recoms, cascade_create=True)) recome_movies = [] for recom in recommended['recomms']: recom_imdb = 'tt' + str(recom['id']) recome_movies.append(recom_imdb) return recome_movies if __name__ == '__main__': recommended = client.send(RecommendUsersToItem('0266697', 5))
from recombee_api_client.api_client import RecombeeClient from recombee_api_client.api_requests import AddItemProperty, SetItemValues, AddPurchase from recombee_api_client.api_requests import ItemBasedRecommendation, Batch, ResetDatabase import random import csv PROBABILITY_PURCHASED = 0.1 client = RecombeeClient('wt-proj', 'gVEMJ5zdYOleXwlX4MyCtExwaa8MgAFgejz0W7TPa8kB1Qebtp1t0OvESDDdwrmO') #Clear the entire database client.send(ResetDatabase()) # We will use courses as items # Courses have three properties # - domain (string) # - title (string) # - description (string) # Add properties of items client.send(AddItemProperty('domain', 'string')) client.send(AddItemProperty('title', 'string')) client.send(AddItemProperty('description', 'string')) # Prepare requests for setting a catalog of courses with open('courseCatalog.csv') as csvfile: csvreader = csv.reader(csvfile) for row in csvreader: requests = [SetItemValues( "course-%s" % row[0], #itemId
import random from datetime import datetime data1=[] data2=[] def generate_data(): DATA = [] user_id = random.randrange(2,21) product_id = random.randrange(1,11) DATA.append(user_id) DATA.append(product_id) return DATA for i in range(400): #print(generate_data()) data1.append(generate_data()) for j in range(400): #print(generate_data()) data2.append(generate_data()) #print(data1) #print(data2) for i in range(400): client.send(AddDetailView(data1[i][0], data1[i][1], cascade_create=True)) client.send(AddPurchase(data2[i][0], data2[i][1], cascade_create=True))
# movie.append(request) # try: # print('Send') # client.send(Batch(movie)) # except APIException as e: # print(e) links = [] with open('ml-latest-small/links.csv') as csvfile: csvreader = csv.reader(csvfile) for row in csvreader: Id = row[0] movie_imdb = row[1] movie_tmdb = row[2] request = SetItemValues(Id, { "imdbId":movie_imdb, "tmdbId":movie_tmdb }, cascade_create=True ) links.append(request) try: print('Send') client.send(Batch(links)) except APIException as e: print(e)
def pred_prod(database, token, USER, NUMBER): client = RecombeeClient(database, token) recommended = client.send(RecommendItemsToUser(USER, 5)) print(recommended)
'tvseries', 'IG1t5vSWYgpJvClpbJZUn29oqnCu6QnIHoJdm9u5dRLom47i0WrpWrNKcZ9om21x') requests = [] list_of_ratings = SeriesRating.objects.all() print(list_of_ratings) print(len(list_of_ratings)) for i in range(0, len(list_of_ratings)): name = list_of_ratings[i].user.id series = list_of_ratings[i].series.id rate = list_of_ratings[i].rating rate = (rate - 10) / 10 print(str(name) + ' ' + str(series) + ' ' + str(rate)) request = AddRating(name, series, rate, cascade_create=True) requests.append(request) print(len(requests)) print(requests) try: print('sending') client.send(Batch(requests)) print('Send') except APIException as e: print(e) except ResponseException as e: print(e) except ApiTimeoutException as e: print(e) except Exception as e: print(e)
from recombee_api_client.api_client import RecombeeClient from recombee_api_client.exceptions import APIException from recombee_api_client.api_requests import * client = RecombeeClient( 'moodsic-dev', 'Pb4MhOK6751HmdEGmvISdFJqXjLDWEtVkyb2AIY4Cn1EL3vQWy9V0B236OGEj8iy') #For reseting the database before changing the model client.send(ResetDatabase()) ######################################### # WARNING Recombee API creates some problems when you're trying to add an object # when it already exists, therefore if you want to build the model of the database, you have to # erase the whole database first, this is the best way yet # adendum: requst should be done in certain order # # PrimaryKey means that we will transfer PrimaryKeys from our server database to the recombee database as id-s ########################################## #DATA MODELS FOR USERS AND MUSIC client.send(AddUserProperty("username", "string")) client.send(AddUserProperty("usualMood", "string")) client.send(AddUserProperty("age", "int")) #this can be good enough for our needs client.send(AddItemProperty("mood", "string")) client.send(AddItemProperty("length", "double")) client.send(AddItemProperty("title", "string")) client.send(AddItemProperty("viewCount", "int"))
class Recombee(object): def __init__(self, app=None): super(Recombee, self).__init__() if app: self.app = app self.load_recombee() def init_app(self, app): self.app = app self.load_recombee() def load_recombee(self): self.recombee_client = RecombeeClient(self.app.config['RECOMBEE_DB'], self.app.config['RECOMBEE_KEY']) def sync_user_data(self, user_id, data=[], timestamp=""): requests = [] for item in data: if item["ids"] is not None and len(item["ids"]) > 0: if item["view_type"] == "bet": for match_id in item["ids"]: r = AddPurchase( user_id, match_id, timestamp=timestamp, cascade_create=True ) requests.append(r) elif item["view_type"] == "scroll": for match_id in item["ids"]: r = SetViewPortion( user_id, match_id, portion=item["options"]["portion"] if item["options"]is not None else None, timestamp=timestamp, cascade_create=True ) requests.append(r) else: for match_id in item["ids"]: r = AddDetailView( user_id, match_id, timestamp=timestamp, cascade_create=True, duration=item["options"]["duration"] if item["options"] is not None else None ) requests.append(r) br = Batch(requests) result = self.recombee_client.send(br) def sync_item_data(self, matches=[]): requests = [] for match in matches: r = SetItemValues( match["id"], { "name": match["name"], "tags": [], "sourceID": match["source_id"], "categoryID": match["category_id"], "closeTime": match["date"] }, cascade_create=True ) requests.append(r) br = Batch(requests) self.recombee_client.send(br) def user_recommended_data(self, user_id, count=5, options=None): return self.recombee_client.send( RecommendItemsToUser( user_id, count, filter=options["filter"] if options is not None else None ) )
# print(count) # # if count == 1000: # # transaction.commit() # # if count == 50000: # # transaction.commit() # # transaction.commit() def main(): requests = [] with open('BX-CSV-Dump/BX-Book-Ratings.csv', encoding='utf-8') as f: reader = list(csv.reader(f, delimiter=';'))[1000:6000] for row in reader: request = AddRating(row[0], row[1], (int(row[2]) - 5) / 5, cascade_create=True) requests.append(request) try: print('Send Ratings') client.send(Batch(requests)) except APIException as e: print(e) # main() recommended = client.send(RecommendItemsToUser('276747', 5)) print(recommended) # transaction.set_autocommit(True)
from recombee_api_client.api_client import RecombeeClient from recombee_api_client.api_requests import * client = RecombeeClient( 'sns', 'cqLZqZnboKlyVKS7EhhYYyM8BflGRDlizngZbljA3kp67tjd1FKfH3WaXLNSXl7F') count = 1 users = [] for i in range(1, 102): request = DeleteUser(str(count)) count = count + 1 users.append(request) try: print('sending') client.send(Batch(users)) print('sent') except APIException as e: print(e)
from recombee_api_client.api_client import RecombeeClient from recombee_api_client.api_requests import * client = RecombeeClient( 'sns', 'cqLZqZnboKlyVKS7EhhYYyM8BflGRDlizngZbljA3kp67tjd1FKfH3WaXLNSXl7F') print(client.send(GetItemValues('1'))) print(client.send(ListItemProperties())) recommended = client.send( UserBasedRecommendation('672', 5, filter="Animation" in 'genre')) print(recommended)