Browse Source

Add Yahoo Finance data enhancer

pull/1865/head
Thomas 2 years ago
parent
commit
2a23282bf9
  1. 23
      apps/api/src/services/data-provider/data-enhancer/data-enhancer.module.ts
  2. 2
      apps/api/src/services/data-provider/data-enhancer/trackinsight/trackinsight.service.ts
  3. 58
      apps/api/src/services/data-provider/data-enhancer/yahoo-finance/yahoo-finance.service.ts

23
apps/api/src/services/data-provider/data-enhancer/data-enhancer.module.ts

@ -1,15 +1,30 @@
import { ConfigurationModule } from '@ghostfolio/api/services/configuration.module';
import { CryptocurrencyModule } from '@ghostfolio/api/services/cryptocurrency/cryptocurrency.module';
import { TrackinsightDataEnhancerService } from '@ghostfolio/api/services/data-provider/data-enhancer/trackinsight/trackinsight.service'; import { TrackinsightDataEnhancerService } from '@ghostfolio/api/services/data-provider/data-enhancer/trackinsight/trackinsight.service';
import { YahooFinanceDataEnhancerService } from '@ghostfolio/api/services/data-provider/data-enhancer/yahoo-finance/yahoo-finance.service';
import { DataProviderModule } from '@ghostfolio/api/services/data-provider/data-provider.module';
import { YahooFinanceService } from '@ghostfolio/api/services/data-provider/yahoo-finance/yahoo-finance.service';
import { Module } from '@nestjs/common'; import { Module } from '@nestjs/common';
@Module({ @Module({
exports: ['DataEnhancers', TrackinsightDataEnhancerService], exports: [
'DataEnhancers',
TrackinsightDataEnhancerService,
YahooFinanceDataEnhancerService
],
imports: [ConfigurationModule, CryptocurrencyModule, DataProviderModule],
providers: [ providers: [
TrackinsightDataEnhancerService,
YahooFinanceDataEnhancerService,
{ {
inject: [TrackinsightDataEnhancerService], inject: [
TrackinsightDataEnhancerService,
YahooFinanceDataEnhancerService
],
provide: 'DataEnhancers', provide: 'DataEnhancers',
useFactory: (trackinsight) => [trackinsight] useFactory: (trackinsight, yahooFinance) => [trackinsight, yahooFinance]
}, },
TrackinsightDataEnhancerService YahooFinanceService
] ]
}) })
export class DataEnhancerModule {} export class DataEnhancerModule {}

2
apps/api/src/services/data-provider/data-enhancer/trackinsight/trackinsight.service.ts

@ -1,11 +1,13 @@
import { DataEnhancerInterface } from '@ghostfolio/api/services/data-provider/interfaces/data-enhancer.interface'; import { DataEnhancerInterface } from '@ghostfolio/api/services/data-provider/interfaces/data-enhancer.interface';
import { Country } from '@ghostfolio/common/interfaces/country.interface'; import { Country } from '@ghostfolio/common/interfaces/country.interface';
import { Sector } from '@ghostfolio/common/interfaces/sector.interface'; import { Sector } from '@ghostfolio/common/interfaces/sector.interface';
import { Injectable } from '@nestjs/common';
import { SymbolProfile } from '@prisma/client'; import { SymbolProfile } from '@prisma/client';
import bent from 'bent'; import bent from 'bent';
const getJSON = bent('json'); const getJSON = bent('json');
@Injectable()
export class TrackinsightDataEnhancerService implements DataEnhancerInterface { export class TrackinsightDataEnhancerService implements DataEnhancerInterface {
private static baseUrl = 'https://data.trackinsight.com'; private static baseUrl = 'https://data.trackinsight.com';
private static countries = require('countries-list/dist/countries.json'); private static countries = require('countries-list/dist/countries.json');

58
apps/api/src/services/data-provider/data-enhancer/yahoo-finance/yahoo-finance.service.ts

@ -0,0 +1,58 @@
import { DataEnhancerInterface } from '@ghostfolio/api/services/data-provider/interfaces/data-enhancer.interface';
import { YahooFinanceService } from '@ghostfolio/api/services/data-provider/yahoo-finance/yahoo-finance.service';
import { Injectable, Logger } from '@nestjs/common';
import { DataSource, SymbolProfile } from '@prisma/client';
@Injectable()
export class YahooFinanceDataEnhancerService implements DataEnhancerInterface {
public constructor(
private readonly yahooFinanceService: YahooFinanceService
) {}
public async enhance({
response,
symbol
}: {
response: Partial<SymbolProfile>;
symbol: string;
}): Promise<Partial<SymbolProfile>> {
if (response.dataSource !== 'YAHOO' && !response.isin) {
return response;
}
try {
let yahooSymbol: string;
if (response.dataSource === 'YAHOO') {
yahooSymbol = symbol;
} else {
const { items } = await this.yahooFinanceService.search(response.isin);
yahooSymbol = items[0].symbol;
}
const assetProfile = await this.yahooFinanceService.getAssetProfile(
yahooSymbol
);
if (assetProfile.countries) {
response.countries = assetProfile.countries;
}
if (assetProfile.sectors) {
response.sectors = assetProfile.sectors;
}
if (assetProfile.url) {
response.url = assetProfile.url;
}
} catch (error) {
Logger.error(error, 'YahooFinanceDataEnhancerService');
}
return response;
}
public getName() {
return DataSource.YAHOO;
}
}
Loading…
Cancel
Save