Project

General

Profile

1

    
2
import {throwError as observableThrowError, Observable} from 'rxjs';
3
import {Injectable} from '@angular/core';
4
import {Http, Response} from '@angular/http';
5

    
6

    
7

    
8
import { HttpClient } from '@angular/common/http';
9

    
10
import { ClaimResult} from  '../claimEntities.class';
11
import {map} from "rxjs/operators";
12
@Injectable()
13
export class SearchCrossrefService {
14
  constructor( private http: HttpClient ) {}
15

    
16

    
17
  searchCrossrefResults (term: string, size : number, page : number, apiUrl:string, parse:boolean = false):any {
18
     let url = apiUrl+'?query='+term+'&rows='+size+'&offset='+(size*(page-1));
19
     let key = url;
20

    
21
     return this.http.get(url)
22
                     //.map(request => <any> request.json().message)
23
                     .pipe(map(request => request['message']))
24
                     .pipe(map(request => (parse?this.parse(request.items):request)))
25
                     //.catch(this.handleError);
26

    
27
    }
28
    searchCrossrefByDOIs(DOIs: string[], apiUrl:string, parse:boolean = false):any {
29

    
30
      var doisParams = "";
31
      for(var i =0 ;i < DOIs.length; i++){
32
        doisParams+=(doisParams.length > 0?",":"")+'doi:'+DOIs[i];
33
      }
34
       let url = apiUrl+'?filter='+doisParams;
35
       let key = url;
36

    
37

    
38
       return this.http.get(url)
39
                       //.map(request => <any> request.json().message)
40
                       .pipe(map(request => request['message']))
41
                       .pipe(map(request => (parse?this.parse(request.items):request)))
42
                       //.catch(this.handleError);
43

    
44
      }
45
      searchCrossrefByMultipleDOIs(dois: string[], apiUrl:string, parse:boolean = false):any {
46
        let url = apiUrl+'?filter=doi:';
47
        for(var i=0; i<dois.length; i++){
48
          url=url+(url.length==0?'':',')+'doi:'+dois[i];
49
        }
50
        url = apiUrl+'?filter='+url;
51
        let key = url;
52

    
53

    
54
         return this.http.get(url)
55
                         //.map(request => <any> request.json().message)
56
                         .pipe(map(request => request['message']))
57
                         .pipe(map(request => (parse?this.parse(request.items):request)))
58
                         //.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
    return observableThrowError(error  || 'Server error');
67
  }
68
  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

    
101
    return results;
102

    
103
  }
104

    
105
}
(5-5/9)