Project

General

Profile

1 55964 argiro.kok
2
import {throwError as observableThrowError, Observable} from 'rxjs';
3 50169 argiro.kok
import {Injectable} from '@angular/core';
4
import {Http, Response} from '@angular/http';
5 55964 argiro.kok
6
7
8
import { HttpClient } from '@angular/common/http';
9
10 51910 argiro.kok
import { ClaimResult} from  '../claimEntities.class';
11 55964 argiro.kok
import {map} from "rxjs/operators";
12 50169 argiro.kok
@Injectable()
13
export class SearchCrossrefService {
14 55964 argiro.kok
  constructor( private http: HttpClient ) {}
15 50169 argiro.kok
16
17 51910 argiro.kok
  searchCrossrefResults (term: string, size : number, page : number, apiUrl:string, parse:boolean = false):any {
18 50586 argiro.kok
     let url = apiUrl+'?query='+term+'&rows='+size+'&offset='+(size*(page-1));
19 50169 argiro.kok
     let key = url;
20
21
     return this.http.get(url)
22 55964 argiro.kok
                     //.map(request => <any> request.json().message)
23
                     .pipe(map(request => request['message']))
24
                     .pipe(map(request => (parse?this.parse(request.items):request)))
25 50169 argiro.kok
                     //.catch(this.handleError);
26
27
    }
28 51910 argiro.kok
    searchCrossrefByDOIs(DOIs: string[], apiUrl:string, parse:boolean = false):any {
29 50586 argiro.kok
30 50169 argiro.kok
      var doisParams = "";
31
      for(var i =0 ;i < DOIs.length; i++){
32
        doisParams+=(doisParams.length > 0?",":"")+'doi:'+DOIs[i];
33
      }
34 50586 argiro.kok
       let url = apiUrl+'?filter='+doisParams;
35 50169 argiro.kok
       let key = url;
36
37
38
       return this.http.get(url)
39 55964 argiro.kok
                       //.map(request => <any> request.json().message)
40
                       .pipe(map(request => request['message']))
41
                       .pipe(map(request => (parse?this.parse(request.items):request)))
42 50169 argiro.kok
                       //.catch(this.handleError);
43
44
      }
45 51910 argiro.kok
      searchCrossrefByMultipleDOIs(dois: string[], apiUrl:string, parse:boolean = false):any {
46 50586 argiro.kok
        let url = apiUrl+'?filter=doi:';
47 50169 argiro.kok
        for(var i=0; i<dois.length; i++){
48
          url=url+(url.length==0?'':',')+'doi:'+dois[i];
49
        }
50 50586 argiro.kok
        url = apiUrl+'?filter='+url;
51 50169 argiro.kok
        let key = url;
52
53
54
         return this.http.get(url)
55 55964 argiro.kok
                         //.map(request => <any> request.json().message)
56
                         .pipe(map(request => request['message']))
57
                         .pipe(map(request => (parse?this.parse(request.items):request)))
58 50169 argiro.kok
                         //.catch(this.handleError);
59
60
        }
61
62
  private handleError (error: Response) {
63
    // in a real world app, we may send the error to some remote logging infrastructure
64
    // instead of just logging it to the console
65
    console.log(error);
66 55964 argiro.kok
    return observableThrowError(error  || 'Server error');
67 50169 argiro.kok
  }
68 51910 argiro.kok
  parse(response):ClaimResult[]{
69
    var results:ClaimResult[] = [];
70
    for(var i=0; i<response.length; i++){
71
      var item=response[i];
72
      var result:ClaimResult = new ClaimResult();
73
      result.publisher =  null;
74
      result.journal =  null;
75
      result.DOI = item.DOI;
76
      result.id = item.DOI;
77
      result.title = item.title;
78
      result.url = item.URL;
79
      result.source = 'crossref';
80
      result.type = 'publication';
81
      if(item['published-print']){
82
        result.date = item['published-print']['date-parts'][0];
83
      }
84
      result.accessRights =  "OPEN";
85
      result.publisher = item.publisher;
86
      result.journal = null;
87
      result.result = item;
88
      if(item.author){
89
        for(var j=0; j<item.author.length; j++){
90
            result.authors.push(item.author[j].family+", "+item.author[j].given);
91
        }
92
      }
93
      if(item.editor){
94
        for(var j=0; j<item.editor.length; j++){
95
            result.editors.push(item.editor[j].family+", "+item.editor[j].given);
96
        }
97
      }
98
      results.push(result);
99
    }
100 50169 argiro.kok
101 51910 argiro.kok
    return results;
102
103
  }
104
105 50169 argiro.kok
}