+ def stop
+ self.token = nil
+ self.save
+ end
+
+ def ymd_to_time ymd_str
+ date = nil
+ if ymd_str.blank?
+ date = if self.received_at
+ self.received_at
+ else
+ nil
+ end
+ else
+ begin
+ date = Time.parse(ymd_str[0..3] + '/' + ymd_str[4..5] + '/' + ymd_str[6..7])
+ rescue
+ date = nil
+ end
+ end
+ date
+ end
+
+ def export_url action, date
+ u = self.provider.export_url action
+ prm = '?auth_token=' + self.token
+ prm = prm + '&date=' + date.strftime("%Y%m%d") unless date.blank?
+ u = URI.join(u, prm)
+ u.to_s
+ end
+
+ def export_from_provider url
+ res = nil
+ begin
+ json = RestClient.get url
+ res = JSON.parse json
+ rescue
+ end
+ res
+ end
+
+ def export_by action, ymd
+ t = ymd_to_time ymd
+ url = export_url action, t
+ export_from_provider(url)
+ end
+
+ def licenses_import date
+ licenses = self.export_by('licenses_export', date)
+ if licenses
+ ProviderLicense.import self.provider.id, licenses
+ else
+ LicenseImportResult.new nil
+ end
+ end
+
+ def artists_import date
+ artists = self.export_by('artists_export', date)
+ if artists
+ ProviderArtist.import self.provider.id, artists
+ else
+ ArtistImportResult.new nil
+ end
+ end
+
+ def original_pictures_import date
+ original_pictures = self.export_by('original_pictures_export', date)
+ pictures = self.export_by('pictures_export', date)
+ if original_pictures and pictures
+ ProviderOriginalPicture.import self.provider.id, original_pictures, pictures
+ else
+ OriginalPictureImportResult.new nil
+ end
+ end
+
+ def import date
+ import_result = nil
+ ProviderStatus.transaction do
+ import_result = self.licenses_import date
+ raise ActiveRecord::Rollback unless import_result.success?
+ import_result = self.artists_import date
+ raise ActiveRecord::Rollback unless import_result.success?
+ import_result = self.original_pictures_import date
+ raise ActiveRecord::Rollback unless import_result.success?
+ self.received_at = Time.now
+ self.save
+ end
+ import_result
+ end
+
+ def self.import_all date = nil
+ failures = {}
+ ProviderStatus.approve_list.each do |provider_status|
+ import_result = provider_status.import date
+ next if import_result.success?
+ failures[provider_status.provider.name] = import_result
+ end
+ failures.each do |name, import_result|
+ puts name
+ end
+ end