Project

General

Profile

1 43769 argiro.kok
import {Injectable} from '@angular/core';
2
import {Http, Response} from '@angular/http';
3
import {Observable}     from 'rxjs/Observable';
4 43785 argiro.kok
import {OpenaireProperties} from '../utils/properties/openaireProperties';
5 44638 argiro.kok
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 43769 argiro.kok
@Injectable()
10
export class SearchCrossrefService {
11 44638 argiro.kok
  constructor( private http: Http, public _cache: CacheService) {}
12 43769 argiro.kok
13
14
  searchCrossrefResults (term: string, size : number, page : number):any {
15
     let url = OpenaireProperties.getSearchCrossrefAPIURL()+'?query='+term+'&rows='+size+'&offset='+(size*(page-1));
16 44638 argiro.kok
     let key = url;
17
     if (this._cache.has(key)) {
18
       return Observable.of(this._cache.get(key));
19
     }
20
21 43769 argiro.kok
     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 44638 argiro.kok
                     .do(res => {
25
                       this._cache.set(key, res);
26
                     });
27 43769 argiro.kok
                     //.catch(this.handleError);
28
29
    }
30 44797 argiro.kok
    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 44638 argiro.kok
       let key = url;
43
       if (this._cache.has(key)) {
44
         return Observable.of(this._cache.get(key));
45
       }
46
47 43769 argiro.kok
       return this.http.get( url)
48
                       .map(request => <any> request.json().message)
49 44797 argiro.kok
                       .do(items => console.log("Crossref Results: total results = "+items['total-results']+" for doi = "+doisParams))
50 44638 argiro.kok
                       .do(res => {
51
                         this._cache.set(key, res);
52
                       });
53 43769 argiro.kok
                       //.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 44638 argiro.kok
        let key = url;
63
        if (this._cache.has(key)) {
64
          return Observable.of(this._cache.get(key));
65
        }
66
67 43769 argiro.kok
         return this.http.get( url)
68
                         .map(request => <any> request.json().message)
69 44638 argiro.kok
                         .do(items => console.log("Crossref Results: total results = "+items['total-results'])).
70
                         do(res => {
71
                           this._cache.set(key, res);
72
                         });
73 43769 argiro.kok
                         //.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 44907 argiro.kok
    console.log(error);
81 43769 argiro.kok
    return Observable.throw(error  || 'Server error');
82
  }
83
84
}