Project

General

Profile

1
import {Injectable} from '@angular/core';
2
import {Http, Response} from '@angular/http';
3
import {Observable}     from 'rxjs/Observable';
4
import {OpenaireProperties} from '../../../utils/properties/openaireProperties';
5
import 'rxjs/add/observable/of';
6
import 'rxjs/add/operator/do';
7
import 'rxjs/add/operator/share';
8
import { CacheService  } from '../../../shared/cache.service';
9
@Injectable()
10
export class SearchCrossrefService {
11
  constructor( private http: Http, public _cache: CacheService) {}
12

    
13

    
14
  searchCrossrefResults (term: string, size : number, page : number):any {
15
     let url = OpenaireProperties.getSearchCrossrefAPIURL()+'?query='+term+'&rows='+size+'&offset='+(size*(page-1));
16
     let key = url;
17
     if (this._cache.has(key)) {
18
       return Observable.of(this._cache.get(key));
19
     }
20

    
21
     return this.http.get( url)
22
                     .map(request => <any> request.json().message)
23
                     .do(items => console.log("Crossref Results: total results = "+items['total-results']+" keyword = "+term))
24
                     .do(res => {
25
                       this._cache.set(key, res);
26
                     });
27
                     //.catch(this.handleError);
28

    
29
    }
30
    searchCrossrefByDOIs(DOIs: string[]):any {
31
      /*
32
      $request ="http://api.crossref.org/works"."?filter=";
33
                      foreach($dois as $doi){
34
                          $request.="doi:".urlencode( trim($doi)).",";
35
                      }
36
      */
37
      var doisParams = "";
38
      for(var i =0 ;i < DOIs.length; i++){
39
        doisParams+=(doisParams.length > 0?",":"")+'doi:'+DOIs[i];
40
      }
41
       let url = OpenaireProperties.getSearchCrossrefAPIURL()+'?filter='+doisParams;
42
       let key = url;
43
       if (this._cache.has(key)) {
44
         return Observable.of(this._cache.get(key));
45
       }
46

    
47
       return this.http.get( url)
48
                       .map(request => <any> request.json().message)
49
                       .do(items => console.log("Crossref Results: total results = "+items['total-results']+" for doi = "+doisParams))
50
                       .do(res => {
51
                         this._cache.set(key, res);
52
                       });
53
                       //.catch(this.handleError);
54

    
55
      }
56
      searchCrossrefByMultipleDOIs(dois: string[]):any {
57
        let url = OpenaireProperties.getSearchCrossrefAPIURL()+'?filter=doi:';
58
        for(var i=0; i<dois.length; i++){
59
          url=url+(url.length==0?'':',')+'doi:'+dois[i];
60
        }
61
        url = OpenaireProperties.getSearchCrossrefAPIURL()+'?filter='+url;
62
        let key = url;
63
        if (this._cache.has(key)) {
64
          return Observable.of(this._cache.get(key));
65
        }
66

    
67
         return this.http.get( url)
68
                         .map(request => <any> request.json().message)
69
                         .do(items => console.log("Crossref Results: total results = "+items['total-results'])).
70
                         do(res => {
71
                           this._cache.set(key, res);
72
                         });
73
                         //.catch(this.handleError);
74

    
75
        }
76

    
77
  private handleError (error: Response) {
78
    // in a real world app, we may send the error to some remote logging infrastructure
79
    // instead of just logging it to the console
80
    console.log(error);
81
    return Observable.throw(error  || 'Server error');
82
  }
83

    
84
}
(6-6/10)