def notExistFicha(_fondo_id, _clase_id): # Consulto cuales fichas ya tengo en la DB para la fecha de hoy __id = f"{__now.strftime('%Y%m%d')}_{_fondo_id}_{_clase_id}" print(__id) rendimientos = MongoDB.getCollection(collection_name='rendimientos') return (rendimientos.count_documents({'_id': __id}, limit=1) == 0)
# *-* coding: utf-8 *-* ''' Calcula los fondos que mas rindieron y los publica en Twitter ''' from common.postTwitter import PostTwitter from datetime import date, datetime, timedelta from common.general import general from common.connection import MongoDB from common.graph import graph db_rendimientos = MongoDB.getCollection(collection_name='rendimientos') # ::::::::::::::::::::::::: # Parametros de la consulta __postea = False __top = 50 __delta = 20 # ::::::::::::::::::::::::: def getFCIBilleteras(): fecha_hasta = datetime.today() - timedelta(days=1) fecha_desde = datetime.today() - timedelta(days=__delta) # Clase 1982 Mercado Fondos Clase A # Clase 839 SBS Ahorro Clase A curs = db_rendimientos.find({ "clase_id": { "$in": ["1982", "839"] }, "fecha": {
Sólo se ejecuta en el Setup del proyecto. ''' import requests from common.connection import MongoDB from common.general import general # Comienzo a recolectar la info url = 'https://api.cafci.org.ar/fondo?estado=1&include=clase_fondo,entidad;gerente&limit=0' response = requests.get(url) data = response.json() if response.status_code != 200: print('Failed to get data:', response.status_code) else: mongo_db = MongoDB(collection_name = 'clases') data = data['data'] for item in data: clases = item['clase_fondos'] gerente_nom = item["gerente"]["nombre"] gerente = item["gerente"]["nombreCorto"] esEsco = general.IsEsco(gerente_nom) for clase in clases: _id = f"{clase['fondoId']}_{clase['id']}" posted_id = mongo_db.insert({"_id": _id, "fondo_id": clase["fondoId"], "clase_id": clase["id"], "tickerBloomberg" : clase["tickerBloomberg"], "nombre": clase["nombre"], "gerente": gerente, "esESCO": esEsco} )
Aproximadamente hay 460 fondos diarios Esta información que recolecta la utiliza para calcular los fondos que más patrimonio poseen en postPatrimonio ''' import requests from bson import Decimal128 as Decimal from datetime import datetime from common.connection import MongoDB from common.general import general counter = 1270332 # 30-12-2020 # Obtengo el último ID hasta el momento en la DB y le sumo 1 collection = MongoDB.getCollection(collection_name = 'patrimonio') curs = collection.find().limit(1).sort([("_id", -1)]) for item in curs: counter = item["_id"] counter = counter + 1 # Comienzo a recolectar la info mongo_db = MongoDB(collection_name = 'patrimonio') while True: url = f'https://api.cafci.org.ar/interfaz/semanal/resumen/cartera/{str(counter)}' response = requests.get(url) data = response.json()
''' Calcula los fondos con mas patrimonio y los postea en Twitter ''' from common.general import general from common.postTwitter import PostTwitter from common.connection import MongoDB from datetime import datetime, timedelta # ::::::::::::::::::::::::: # Parametros de la consulta __postea = True __top = 5 __delta = 1 # ::::::::::::::::::::::::: mongo_db = MongoDB.getCollection(collection_name='patrimonio') fecha_hasta = datetime.today() - timedelta(days=__delta) fecha_desde = fecha_hasta.today() - timedelta(days=1 + __delta) curs = mongo_db.find({ "data.Moneda": "Peso Argentina", "fecha": { "$gte": fecha_desde, "$lt": fecha_hasta } }).sort([("patrimonio", -1)]).limit(__top) fecha_publish = datetime.today() message_post = f'Fondos en pesos con Mayor Patrimonio al {str(fecha_publish.strftime("%d/%m/%Y"))}\n\n'
import requests from common.connection import MongoDB from common.general import general # Comienzo a recolectar la info i = 1 url = 'https://api.cafci.org.ar/fondo?estado=1&include=entidad;depositaria,entidad;gerente,tipoRenta,moneda,horizonte,duration,tipo_fondo&limit=0&order=fondo.nombre' response = requests.get(url) data = response.json() if response.status_code != 200: print('Failed to get data:', response.status_code) else: mongo_db = MongoDB(collection_name='fondos') data = data['data'] # print(data) for item in data: gerente_nom = item["gerente"]["nombre"] nombre = item["nombre"] gerente = item["gerente"]["nombreCorto"] plazo = item['diasLiquidacion'] fechaInicio = item['inicio'] depositaria = item["depositaria"]["nombre"] tipoRenta = item["tipoRenta"]["nombre"] horizonte = item["horizonte"]["nombre"] tipoFondo = item["tipoFondo"]["nombre"]
def getFichas(): print(f'start @ {str(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))}') # Consulto los fondos para traer la ficha db_clases = MongoDB.getCollection(collection_name='clases') for item in db_clases.find(): fondo_id = item["fondo_id"] clase_id = item["clase_id"] if notExistFicha(fondo_id, clase_id): url = f'https://api.cafci.org.ar/fondo/{str(fondo_id)}/clase/{str(clase_id)}/ficha' response = requests.get(url) data = response.json() if response.status_code != 200 or "error" in data: print('Failed to get data:', response.status_code) else: data_converted = data['data'] vcp = 0 patrimonio = 0 # Recolecto info y la acomodo la información a guardar if "diaria" in data_converted["info"]: diaria = data_converted["info"]["diaria"] rendimientos = diaria["rendimientos"] fecha_data = diaria["referenceDay"] patrimonio = diaria["actual"]["patrimonio"] if patrimonio != "": patrimonio = Decimal(patrimonio) vcp = diaria["actual"]["vcpUnitario"] if vcp != "": vcp = Decimal(vcp) fecha = datetime.strptime(fecha_data, '%d/%m/%Y') if fecha == __fecha: _id = f"{fecha.strftime('%Y%m%d')}_{fondo_id}_{clase_id}" print(f'{_id} Inserted') moneda = data_converted["model"]["fondo"]["moneda"][ "codigoCafci"] tpr = data_converted["model"]["fondo"]["tipoRenta"] tipo_renta = { "id": tpr["id"], "nombre": tpr["nombre"], "codigoCafci": tpr["codigoCafci"] } nombre = data_converted["model"]["fondo"]["nombre"] tickerBloomberg = data_converted["model"][ "tickerBloomberg"] gerente = data_converted["model"]["fondo"]["gerente"][ "nombreCorto"] gerente_nom = data_converted["model"]["fondo"][ "gerente"]["nombre"] horizonte = data_converted["model"]["fondo"][ "horizonte"]["nombre"] duration = data_converted["model"]["fondo"][ "duration"]["nombre"] esEsco = general.IsEsco(gerente_nom) try: mongo_db_insert = MongoDB( collection_name='rendimientos') posted_id = mongo_db_insert.insert({ "_id": _id, "fondo_id": fondo_id, "clase_id": clase_id, "tickerBloomberg": tickerBloomberg, "fecha": fecha, "nombre": nombre, "gerente": gerente, "moneda": moneda, "vcp": vcp, "patrimonio": patrimonio, "tipo_renta": tipo_renta, "horizonte": horizonte, "duration": duration, "rendimientos": rendimientos, "esESCO": esEsco }) except Exception as e: print("Error " + _id) response.close() print(f'end @ {str(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))}')