view · edit · sidebar · attach · print · history

20110502-testcases-oddb_org-state-drugs-compare_rb-mapping_pharmacodes

<< | Index | >>


  1. Update testcases
  2. Mapping migel-pharmacode

Goal/Estimate/Evaluation
  • Mapping pharmacodes / 30% / 70%
Milestones
  • Update testcases
    1. fix src/state/drugs/compare.rb (coverage: 64.81%) Test-cases are not yet 100% covered
  • Mapping pharmacodes
Summary
Commits

Mapping migel-pharmacode

Email

Task

  • Mapping pharmacode to eancode (and the other data) through web data

Test run swissindex.rb

masa@masa ~/work $ ruby swissindex_nonpharma_getbypharmacode.rb 
/usr/lib64/ruby/gems/1.8/gems/rack-1.2.1/lib/rack/utils.rb:138:in `union': can't convert Array into String (TypeError)
        from /usr/lib64/ruby/gems/1.8/gems/rack-1.2.1/lib/rack/utils.rb:138
        from /usr/lib64/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
        from /usr/lib64/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
        from /usr/lib64/ruby/gems/1.8/gems/httpi-0.9.0/lib/httpi/request.rb:3
        from /usr/lib64/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
        from /usr/lib64/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
        from /usr/lib64/ruby/gems/1.8/gems/savon-0.8.6/lib/savon/client.rb:1
        from /usr/lib64/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
        from /usr/lib64/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
        from /usr/lib64/ruby/gems/1.8/gems/savon-0.8.6/lib/savon.rb:3
        from /usr/lib64/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in `gem_original_require'
        from /usr/lib64/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in `require'
        from swissindex_nonpharma_getbypharmacode.rb:4

Note

  • The following lib versions can run
    • rack 1.0.0
    • httpi 0.9.0
    • savon 0.8.6

To get the other data than ean-code by mechanize

Sample script

#! /usr/bin/env ruby
# search_migel_by_pharmacode -- 02.05.2011 -- mhatakeyama@ywesee.com


require 'rubygems'
require 'mechanize'

pharmacode = '2355664'
base_url   = 'https://sample url'
agent = Mechanize.new
agent.get(base_url + pharmacode)
puts agent.page.uri
agent.page.search('td').each do |td|
    puts td.inner_text.chomp.strip
    puts td.inner_text.chomp.strip.length
    puts '---'
end

Note

  • The web site is mainly composed by 'table' tag.

To get and parse xml document

(updated) swissindex.rb (for one pharmacode and output)

require 'rubygems'
require 'savon'


out_file   = 'out.csv'
pharmacode_file = 'pharmacode_list.dat'

class Swissindex
  def initialize
    Savon.configure do |config|
        config.log = false            # disable logging
        config.log_level = :info      # changing the log level
    #    config.logger = Rails.logger  # using the Rails logger
    end
    @client = Savon::Client.new do | wsdl, http |
      wsdl.document = "https://index.ws.e-mediat.net/Swissindex/NonPharma/ws_NonPharma_V101.asmx?WSDL"
    end
  end
  def get_item(pharmacode)
    response = @client.request :get_by_pharmacode do
      soap.xml = '<?xml version="1.0" encoding="utf-8"?>
      <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
        <soap:Body>
            <pharmacode xmlns="http://swissindex.e-mediat.net/SwissindexNonPharma_out_V101">' + pharmacode + '</pharmacode>
            <lang xmlns="http://swissindex.e-mediat.net/SwissindexNonPharma_out_V101">DE</lang>
        </soap:Body>
      </soap:Envelope>'
    end
    if nonpharma = response.to_hash[:nonpharma]
      return nonpharma[:item]
    else
      return nil
    end
  end
end

#
# initialize Savon
#
swissindex = Swissindex.new

#
# read pharmacode list
#
pharmacode_list = File.readlines(pharmacode_file).to_a.map{|line| line.chomp}
pharmacode_list.delete("")
#p pharmacode_list

#
# output
#
open(out_file, "w") do |f|
  f.print "pharmacode, GTIN, date, status, stdate, lang, description, additional description, company name, company GLN, pharmpreis, ppub, faktor, pzr\n"

  pharmacode_list.each do |pharmacode|
    line = []
    line << pharmacode
    if item = swissindex.get_item(pharmacode)
      line << item[:gtin]
      line << item[:dt]
      line << item[:status]
      line << item[:stdate]
      line << item[:lang]
      line << item[:dscr]
      line << item[:addscr]
      if company = item[:comp]
        line << company[:name]
        line << company[:gln]
      else
        line << ""*2
      end
    else
      line << ""*9
    end
    f.print line.join(','), "\n"
  end
end

Another script (to get date from the other site)

#! /usr/bin/env ruby
# encoding: utf-8
# search_migel_by_pharmacode -- 02.05.2011 -- mhatakeyama@ywesee.com


require 'rubygems'
require 'mechanize'

require 'hpricot'

pharmacode = '2355664'

class Swissindex
  def initialize
    @base_url   = 'https://sample url'
    @agent = Mechanize.new
  end
  def search(pharmacode)
    @agent.get(@base_url + pharmacode)
    count = 100
    line = []
    @agent.page.search('td').each do |td|
      text = td.inner_text.chomp.strip
      if text.is_a?(String) && text.length == 7 && text == pharmacode
        count = 0
      end
      if count < 7
        text = text.split(/\n/)[1] || text.split(/\n/)[0]
        text = text.gsub(/\302\240/, '').strip
        line << text
        count += 1
      end
    end
    #p line.join(",")
    line
  end
end

#puts agent.page.uri

swissindex = Swissindex.new
p swissindex.search(pharmacode).join(",")

Merge together above two script (swissindex.rb)

Note

  • It cannot yet Positionsnummer
view · edit · sidebar · attach · print · history
Page last modified on May 03, 2011, at 02:39 PM