Project

General

Profile

1
import {throwError as observableThrowError} from 'rxjs';
2
import {Injectable} from '@angular/core';
3
import {HttpClient} from '@angular/common/http';
4
import {ClaimEntity, ClaimResult} from '../claimHelper.class';
5
import {map} from "rxjs/operators";
6
import {EnvProperties} from "../../../utils/properties/env-properties";
7

    
8
@Injectable()
9
export class SearchCrossrefService {
10
  constructor( private http: HttpClient ) {}
11

    
12

    
13
  searchCrossrefResults(term: string, size: number, page: number, properties: EnvProperties, parse: boolean = false): any {
14
    let url = properties.searchCrossrefAPIURL + '?query=' + term + '&rows=' + size + '&offset=' + (size * (page - 1));
15

    
16
     return this.http.get((properties.useCache) ? (properties.cacheUrl + encodeURIComponent(url)) : url)
17
                     .pipe(map(request => request['message']))
18
                     .pipe(map(request => [request["total-results"], parse ? this.parse(request.items) : request]))
19
                     //.catch(this.handleError);
20

    
21
  }
22

    
23
  searchCrossrefByDOIs(DOIs: string[], properties: EnvProperties, parse: boolean = false): any {
24

    
25
    var doisParams = "";
26
    for (var i = 0; i < DOIs.length; i++) {
27
      doisParams += (doisParams.length > 0 ? "," : "") + 'doi:' + DOIs[i];
28
    }
29
    let url = properties.searchCrossrefAPIURL + '?filter=' + doisParams;
30
           return this.http.get(url)
31
                       //.map(request => <any> request.json().message)
32
                       .pipe(map(request => request['message']))
33
                       .pipe(map(request => [request["total-results"], parse ? this.parse(request['items']) : request]))
34
                       //.catch(this.handleError);
35
}
36
  searchCrossrefByMultipleDOIs(dois: string[], properties: EnvProperties, parse: boolean = false): any {
37
    let url = properties.searchCrossrefAPIURL + '?filter=doi:';
38
    for (var i = 0; i < dois.length; i++) {
39
      url = url + (url.length == 0 ? '' : ',') + 'doi:' + dois[i];
40
    }
41
    url = properties.searchCrossrefAPIURL + '?filter=' + url;
42
         return this.http.get(url)
43
                         //.map(request => <any> request.json().message)
44
                         .pipe(map(request => request['message']))
45
                         .pipe(map( request => [request["total-results"], parse ? this.parse(request.items) : request]))
46
                         //.catch(this.handleError);
47

    
48
  }
49

    
50
  private handleError(error: any) {
51
    // in a real world app, we may send the error to some remote logging infrastructure
52
    // instead of just logging it to the console
53
    console.log(error);
54
    return observableThrowError(error  || 'Server error');
55
  }
56

    
57
  parse(response): ClaimEntity[] {
58
    const results: ClaimEntity[] = [];
59
    for (let i = 0; i < response.length; i++) {
60
      const item = response[i];
61
      const entity: ClaimEntity = new ClaimEntity();
62
      entity.result = new ClaimResult();
63
      entity.result.publisher = null;
64
      entity.result.journal = null;
65
      entity.result.DOI = item.DOI;
66
      entity.id = item.DOI;
67
      entity.title = item.title;
68
      entity.result.url = item.URL;
69
      entity.result.source = 'crossref';
70
      entity.type = 'publication';
71
      if (item['published-print']) {
72
        entity.result.date = item['published-print']['date-parts'][0][0];
73
      }
74
      entity.result.accessRights = "OPEN";
75
      entity.result.publisher = item.publisher;
76
      entity.result.journal = null;
77
      entity.result.record = item;
78
      if (item.author) {
79
        entity.result.authors = [];
80
        for (let j = 0; j < item.author.length; j++) {
81
          entity.result.authors.push(item.author[j].family + ", " + item.author[j].given);
82
        }
83
      }
84
      if (item.editor) {
85
        for (let j = 0; j < item.editor.length; j++) {
86
          entity.result.editors.push(item.editor[j].family + ", " + item.editor[j].given);
87
        }
88
      }
89
      results.push(entity);
90
    }
91

    
92
    return results;
93

    
94
  }
95

    
96
}
(5-5/9)