<commit_before>class Proveedor < ActiveRecord::Base

  belongs_to :especie
  attr_accessor :totales, :observaciones, :observacion, :observaciones_mapa, :kml, :ejemplares, :ejemplar, :ejemplares_mapa

  # Las fotos de referencia de naturalista son una copia de las fotos de referencia de enciclovida
  def fotos_naturalista
    ficha = ficha_naturalista_api_nodejs
    return ficha unless ficha[:estatus] == 'OK'

    resultado = ficha[:ficha]['results'].first
    fotos = resultado['taxon_photos']
    {estatus: 'OK', fotos: fotos}
  end

  # Todos los nombres comunes de la ficha de naturalista
  def nombres_comunes_naturalista
    ficha = ficha_naturalista_api
    return ficha unless ficha[:estatus] == 'OK'

    nombres_comunes = ficha[:ficha]['taxon_names']
    # Pone en la primera posicion el deafult_name
    nombres_comunes.unshift(ficha[:ficha]['default_name']) if (ficha[:ficha]['default_name'].present? && ficha[:ficha]['default_name'].any?)
    {estatus: 'OK', nombres_comunes: nombres_comunes}
  end

  # Consulta la fihca de naturalista por medio de su API nodejs
  def ficha_naturalista_api_nodejs
    # Si no existe naturalista_id, trato de buscar el taxon en su API y guardo el ID
    if naturalista_id.blank?
      resp = especie.ficha_naturalista_por_nombre
      return resp unless resp[:estatus] == 'OK'
    end

    begin
      resp = RestClient.get "#{CONFIG.inaturalist_api}/taxa/#{naturalista_id}"
      ficha = JSON.parse(resp)
    rescue => e
      return {estatus: 'error', msg: e}
    end

    return {estatus: 'error', msg: 'Tiene más de un resultado, solo debería ser uno por ser ficha'} unless ficha['total_results'] == 1
    return {estatus: 'OK', ficha: ficha}
  end

  # Consulta la ficha por medio de su API web, algunas cosas no vienen en el API nodejs
  def ficha_naturalista_api
    # Si no existe naturalista_id, trato de buscar el taxon en su API y guardo el ID
    if naturalista_id.blank?
      resp = especie.ficha_naturalista_por_nombre
      return resp unless resp[:estatus] == 'OK'
    end

    begin
      resp = RestClient.get "#{CONFIG.naturalista_url}/taxa/#{naturalista_id}.json"
      ficha = JSON.parse(resp)
    rescue => e
      return {estatus: 'error', msg: e}
    end

    return {estatus: 'error', msg: 'Tiene más de un resultado, solo debería ser uno por ser ficha'} if ficha['error'] == 'No encontrado'
    return {estatus: 'OK', ficha: ficha}
  end

  def geodatos
    geodatos = {}
    geodatos[:cuales] = []

    if geoserver_info.present?
      info = JSON.parse(geoserver_info)

      geodatos[:cuales] << 'geoserver'
      geodatos[:geoserver_url] = CONFIG.geoserver_url.to_s
      geodatos[:geoserver_descarga_url] = "#{CONFIG.geoserver_descarga_url}&layers=cnb:#{info['layers']}&styles=#{info['styles']}&bbox=#{info['bbox']}&transparent=true"
      geodatos[:geoserver_layer] = info['layers']
    end

    # Para las descargas del SNIB
    url = "#{CONFIG.site_url}especies/#{especie_id}/ejemplares-snib"

    resp = ejemplares_snib('.json')
    if resp[:estatus] == 'OK'
      geodatos[:cuales] << 'snib'
      geodatos[:snib_json] = "#{url}.json"
    end

    resp = ejemplares_snib('.kml')
    if resp[:estatus] == 'OK'
      geodatos[:cuales] << 'snib'
      geodatos[:snib_kml] = "#{url}.kml"
    end

    resp = ejemplares_snib('.kmz')
    if resp[:estatus] == 'OK'
      geodatos[:cuales] << 'snib'
      geodatos[:snib_kmz] = "#{url}.kmz"
    end

    resp = ejemplares_snib('.json', true)
    if resp[:estatus] == 'OK'
      geodatos[:cuales] << 'snib'
      geodatos[:snib_mapa_json] = "#{url}/geodatos/#{especie_id}/#{resp[:ruta].split('/').last}"
    end

    # Para las descargas de naturalista
    url = "#{CONFIG.site_url}/especies/#{especie_id}/observaciones-naturalista"

    resp = observaciones_naturalista('.json')
    if resp[:estatus] == 'OK'
      geodatos[:cuales] << 'naturalista'
      geodatos[:naturalista_json] = "#{url}.json"
    end

    resp = observaciones_naturalista('.kml')
    if resp[:estatus] == 'OK'
      geodatos[:cuales] << 'naturalista'
      geodatos[:naturalista_kml] = "#{url}.kml"
    end

    resp = observaciones_naturalista('.kmz')
    if resp[:estatus] == 'OK'
      geodatos[:cuales] << 'naturalista'
      geodatos[:naturalista_kmz] = "#{url}.kmz"
    end

    resp = observaciones_naturalista('.json', true)
    if resp[:estatus] == 'OK'
      geodatos[:cuales] << 'naturalista'
      geodatos[:naturalista_mapa_json] = "#{url}/geodatos/#{especie_id}/#{resp[:ruta].split('/').last}"<commit_msg>ligero bug en las rutas de descarga del snib y naturalista<commit_after>class Proveedor < ActiveRecord::Base

  belongs_to :especie
  attr_accessor :totales, :observaciones, :observacion, :observaciones_mapa, :kml, :ejemplares, :ejemplar, :ejemplares_mapa

  # Las fotos de referencia de naturalista son una copia de las fotos de referencia de enciclovida
  def fotos_naturalista
    ficha = ficha_naturalista_api_nodejs
    return ficha unless ficha[:estatus] == 'OK'

    resultado = ficha[:ficha]['results'].first
    fotos = resultado['taxon_photos']
    {estatus: 'OK', fotos: fotos}
  end

  # Todos los nombres comunes de la ficha de naturalista
  def nombres_comunes_naturalista
    ficha = ficha_naturalista_api
    return ficha unless ficha[:estatus] == 'OK'

    nombres_comunes = ficha[:ficha]['taxon_names']
    # Pone en la primera posicion el deafult_name
    nombres_comunes.unshift(ficha[:ficha]['default_name']) if (ficha[:ficha]['default_name'].present? && ficha[:ficha]['default_name'].any?)
    {estatus: 'OK', nombres_comunes: nombres_comunes}
  end

  # Consulta la fihca de naturalista por medio de su API nodejs
  def ficha_naturalista_api_nodejs
    # Si no existe naturalista_id, trato de buscar el taxon en su API y guardo el ID
    if naturalista_id.blank?
      resp = especie.ficha_naturalista_por_nombre
      return resp unless resp[:estatus] == 'OK'
    end

    begin
      resp = RestClient.get "#{CONFIG.inaturalist_api}/taxa/#{naturalista_id}"
      ficha = JSON.parse(resp)
    rescue => e
      return {estatus: 'error', msg: e}
    end

    return {estatus: 'error', msg: 'Tiene más de un resultado, solo debería ser uno por ser ficha'} unless ficha['total_results'] == 1
    return {estatus: 'OK', ficha: ficha}
  end

  # Consulta la ficha por medio de su API web, algunas cosas no vienen en el API nodejs
  def ficha_naturalista_api
    # Si no existe naturalista_id, trato de buscar el taxon en su API y guardo el ID
    if naturalista_id.blank?
      resp = especie.ficha_naturalista_por_nombre
      return resp unless resp[:estatus] == 'OK'
    end

    begin
      resp = RestClient.get "#{CONFIG.naturalista_url}/taxa/#{naturalista_id}.json"
      ficha = JSON.parse(resp)
    rescue => e
      return {estatus: 'error', msg: e}
    end

    return {estatus: 'error', msg: 'Tiene más de un resultado, solo debería ser uno por ser ficha'} if ficha['error'] == 'No encontrado'
    return {estatus: 'OK', ficha: ficha}
  end

  def geodatos
    geodatos = {}
    geodatos[:cuales] = []

    if geoserver_info.present?
      info = JSON.parse(geoserver_info)

      geodatos[:cuales] << 'geoserver'
      geodatos[:geoserver_url] = CONFIG.geoserver_url.to_s
      geodatos[:geoserver_descarga_url] = "#{CONFIG.geoserver_descarga_url}&layers=cnb:#{info['layers']}&styles=#{info['styles']}&bbox=#{info['bbox']}&transparent=true"
      geodatos[:geoserver_layer] = info['layers']
    end

    # Para las descargas del SNIB
    url = "#{CONFIG.site_url}especies/#{especie_id}/ejemplares-snib"

    resp = ejemplares_snib('.json')
    if resp[:estatus] == 'OK'
      geodatos[:cuales] << 'snib'
      geodatos[:snib_json] = "#{url}.json"
    end

    resp = ejemplares_snib('.kml')
    if resp[:estatus] == 'OK'
      geodatos[:cuales] << 'snib'
      geodatos[:snib_kml] = "#{url}.kml"
    end

    resp = ejemplares_snib('.kmz')
    if resp[:estatus] == 'OK'
      geodatos[:cuales] << 'snib'
      geodatos[:snib_kmz] = "#{url}.kmz"
    end

    resp = ejemplares_snib('.json', true)
    if resp[:estatus] == 'OK'
      geodatos[:cuales] << 'snib'
      geodatos[:snib_mapa_json] = "#{CONFIG.site_url}geodatos/#{especie_id}/#{resp[:ruta].split('/').last}"
    end

    # Para las descargas de naturalista
    url = "#{CONFIG.site_url}especies/#{especie_id}/observaciones-naturalista"

    resp = observaciones_naturalista('.json')
    if resp[:estatus] == 'OK'
      geodatos[:cuales] << 'naturalista'
      geodatos[:naturalista_json] = "#{url}.json"
    end

    resp = observaciones_naturalista('.kml')
    if resp[:estatus] == 'OK'
      geodatos[:cuales] << 'naturalista'
      geodatos[:naturalista_kml] = "#{url}.kml"
    end

    resp = observaciones_naturalista('.kmz')
    if resp[:estatus] == 'OK'
      geodatos[:cuales] << 'naturalista'
      geodatos[:naturalista_kmz] = "#{url}.kmz"
    end

    resp = observaciones_naturalista('.json', true)
    if resp[:estatus] == 'OK'
      geodatos[:cuales] << 'naturalista'
      geodatos[:naturalista_mapa_json] = "#{CONFIG.site_url}geodatos/#{especie_id}/#{resp[:ruta].split('/').last}"
{'fraction_non_alphanumeric': 0.13644346871569704, 'fraction_numerical': 0.0002195389681668496, 'mean_word_length': 3.7109617373319543, 'pattern_counts': {'":': 0, '<': 41, '<?xml version=': 0, '>': 7, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1270882', 'n_tokens_mistral': 3339, 'n_tokens_neox': 3348, 'n_words': 727}