summaryrefslogtreecommitdiff
path: root/lib/import.rb
blob: 3c1edfec488b7e2ab892017c1a214a2474409b87 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
module OpenTox

  module Import

    class Enanomapper
      include OpenTox

      def self.import
        #get list of bundle URIs
        bundles = JSON.parse(RestClientWrapper.get('https://data.enanomapper.net/bundle?media=application%2Fjson'))["dataset"]
        datasets = []
        bundles.each do |bundle|
          uri = bundle["URI"]
          dataset = Dataset.find_or_create_by(:source => bundle["URI"],:name => bundle["title"])
          nanoparticles = JSON.parse(RestClientWrapper.get(bundle["dataset"]+"?media=application%2Fjson"))["dataEntry"]
          features = JSON.parse(RestClientWrapper.get(bundle["property"]+"?media=application%2Fjson"))["feature"]
          nanoparticles.each do |np|
            nanoparticle = Nanoparticle.find_or_create_by(
              :name => np["values"]["https://data.enanomapper.net/identifier/name"],
              :source => np["compound"]["URI"],
            )
            dataset.substance_ids << nanoparticle.id
            dataset.substance_ids.uniq!
            studies = JSON.parse(RestClientWrapper.get(File.join(np["compound"]["URI"],"study")))["study"]
            studies.each do |study|
              study["effects"].each do |effect|
                effect["result"]["textValue"] ?  klass = NominalFeature : klass = NumericFeature
                # TODO parse core/coating
                # TODO parse proteomics, they come as a large textValue
                $logger.debug File.join(np["compound"]["URI"],"study")
                effect["conditions"].delete_if { |k, v| v.nil? }
                feature = klass.find_or_create_by(
                  #:source => File.join(np["compound"]["URI"],"study"),
                  :name => "#{study["protocol"]["category"]["title"]} #{study["protocol"]["endpoint"]}",
                  :unit => effect["result"]["unit"],
                  :category => study["protocol"]["topcategory"],
                  :conditions => effect["conditions"]
                )
                nanoparticle.parse_ambit_value feature, effect["result"]
                dataset.feature_ids << feature.id 
                dataset.feature_ids.uniq!
              end
            end
          end
          dataset.save
          datasets << dataset
        end
        datasets.collect{|d| d.id}
      end

=begin
      def self.import_ld # defunct, AMBIT JSON_LD does not have substance entries
        #get list of bundle URIs
        bundles = JSON.parse(RestClientWrapper.get('https://data.enanomapper.net/bundle?media=application%2Fjson'))["dataset"]
        datasets = []
        bundles.each do |bundle|
          uri = bundle["URI"]
          study = JSON.parse(`curl -H 'Accept:application/ld+json' '#{uri}/substance'`)
          study["@graph"].each do |i|
            puts i.to_yaml if i.keys.include? "sio:has-value"
          end
        end
        datasets.collect{|d| d.id}
      end
=end

      def self.dump
        #get list of bundle URIs
        `wget 'https://data.enanomapper.net/bundle?media=application%2Fjson' -O bundles.json`
        json = JSON.parse File.read('./bundles.json')
        json["dataset"].each do |dataset|
          uri = dataset["URI"]
          id = uri.split("/").last
          `wget --header='accept:application/json' '#{uri}' -O 'bundle#{id}'`
          `wget --header='accept:application/json' '#{dataset["summary"]}' -O 'summary#{id}.json'`
          `wget --header='accept:application/json' '#{dataset["compound"]}' -O 'compound#{id}.json'`
          `wget --header='accept:application/json' '#{dataset["substance"]}' -O 'substance#{id}.json'`
          `wget --header='accept:application/json' '#{dataset["property"]}' -O 'property#{id}.json'`
          `wget --header='accept:application/json' '#{dataset["dataset"]}' -O 'dataset#{id}.json'`
          `wget --header='accept:application/json' '#{dataset["matrix"]}' -O 'matrix#{id}.json'`
        end
      end

    end

  end

end