Last active
May 25, 2016 15:04
-
-
Save ryana/7e64954d8dd15c858f30 to your computer and use it in GitHub Desktop.
ChartURL / Knowtify.io Integration Example
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Must install the `typhoeus` gem for this example. | |
require 'typhoeus' | |
# These dependencies work for Ruby 2.1.2. Earlier versions of | |
# Ruby may need different requires or gems | |
require 'json' | |
require 'openssl' | |
require 'base64' | |
require 'cgi' | |
# You get these from your ChartURL.com account | |
# These are real credentials that we use for a public test account. | |
CHARTURL_KEY = "dek-d7a46236eda961a6c3c18ffcc6b077ba87d27e9ae85f7842c6d427c265dd5f69d5131308d93332353d4a55a4b1160fcf516515a4a9f0aa50fbf2d7a2e7d0f1c5" | |
CHARTURL_PROJECT_TOKEN = "dt-RwYN" | |
class ChartURL | |
# This helper will try to generate an encrypted URL. The upside is that it | |
# does not require an HTTP request to ChartURL. The downside is that the URL | |
# could end being too long. In that case, it falls back to the | |
# `ChartURL.short_url_for` method | |
def self.url_for template, options | |
json = options.to_json | |
cipher = OpenSSL::Cipher.new 'AES-256-CBC' | |
cipher.encrypt | |
iv = cipher.random_iv | |
cipher.key = OpenSSL::Digest::SHA256.new(CHARTURL_KEY).digest | |
encrypted_json = cipher.update(json) + cipher.final | |
iv_for_url = CGI.escape(Base64.encode64(iv)) | |
data_for_url = CGI.escape(Base64.encode64(encrypted_json)) | |
url = "https://charturl.com/i/#{CHARTURL_PROJECT_TOKEN}/#{template}/#{iv_for_url}/#{data_for_url}" | |
if url.size > 1500 | |
short_url_for(template, options) | |
else | |
url | |
end | |
end | |
def self.short_url_for template, options | |
url = "https://charturl.com/short-urls.json?api_key=#{API_KEY}" | |
headers = {'Content-Type' => 'application/json'} | |
body = options.merge(template: template).to_json | |
surl_response = Typhoeus::Request.post(url, body: body, headers: headers) | |
raise("Error creating ShortURL: #{surl_response.inspect}") if !surl_response.success? | |
JSON.parse(surl_response.body)['short_url'] | |
end | |
end | |
# Do whatever you need to create data | |
def data_for_chart | |
{ | |
options: { | |
data: { | |
columns: [ | |
['Last week'] + 7.times.map { rand(40) + 10 }, | |
['This week'] + 7.times.map { rand(20) + 20 } | |
] | |
} | |
} | |
} | |
end | |
# Generate the URL. The first parameter, `weekly-activity`, is the slug | |
# for a template you create over at ChartURL.com. This template contains | |
# your style and chart options like axes labels, typography, etc.... | |
def charturl_url | |
ChartURL.url_for('weekly-activity', data_for_chart) | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment