Emerald Robinson’s Stupid Lies

She peddles conclusions and innuendo pretending that they’re facts, and she’s doing that about NR.

One of the problems with the political moment we’re in is that there are powerful incentives for people to be stupid and dishonest. The ingredients of this imperfect storm include: a populist climate where nearly all institutions are distrusted, appeals to feelings of persecution will be richly rewarded, political principle for many people is measured by blind loyalty to (or hatred for) a particular personality, stirring controversy is valued regardless of whether there is sufficient evidence to support an allegation or clickbaity innuendo, and conspiracy is counted as courage. All of this leads to a kind of socially constructed garbage heap that will either attract flies, vermin, and other scavengers, or turn people into them.

How Google Tracks Your Personal Information

An insider’s account of the dark side of search engine marketing

Today, Google provides marketers like me with so much of your personal data that we can infer more about you from it than from any camera or microphone.

There have never been more opportunities for marketers like me to exploit your data. Today, 40,000 Google search queries are conducted every second. That’s 3.5 billion searches per day, 1.2 trillion searches per year.

When you search on Google, your query travels to a data center, where up to 1,000 computers work together to retrieve the results and send them back to you. This whole process usually happens in less than one-fifth of a second.

Most people don’t realize that while this is going on, an even faster and more mysterious process is happening behind the scenes: An auction is taking place.

Google SheetAsJSON + Filtering

This is an extension of DJ Adams’ excellent SheetAsJSON Google Apps Script, which provides a way to GET a published Google Spreadsheet as a JSON feed. This version allows generic filtering for terms, more specific control over which rows to parse, and correct MIME type for JSONP output.

Minimal Usage

The following parameters are required for the script to work.

<span style="color: #24292e;"></span>
<span style="color: #24292e;">+ id=<spreadsheet key></span>
<span style="color: #24292e;">+ sheet=<sheet name on spreadsheet>
</span>

Per the original, the above script serves a representation of all the sheet’s data as JSON, using the first row as the set of keys:

{ records : [
    { (row1, column1): (row2, column1), (row1, column2): (row2, column2), ..},
    { (row1, column1): (row3, column1), (row1, column2): (row3, column2), ..},
    ...
  ]
}

Try it: https://script.google.com/macros/s/AKfycbzGvKKUIaqsMuCj7-A2YRhR-f7GZjl4kSxSN1YyLkS01_CfiyE/exec?id=0AgviZ9NWh5fvdDdNMlI2aXRCR2lCX1B1alZ6ZjZxSkE&sheet=Summary&header=2&startRow=3

Accessing a (new-style, public) Google sheet as JSON

If you want to use the latest API (v4), you’ll need to do the following:

  1. Generate a spreadsheets API key (see instructions below).
  2. Make your sheet publicly accessible.
  3. Use a request of the form:
    <span class="pln">https</span><span class="pun">:</span><span class="com">//sheets.googleapis.com/v4/spreadsheets/SPREADSHEET_ID/values/RANGE?key=API_KEY</span>

You’ll then get a clean JSON response back:

<span class="pun">{</span>
  <span class="str">"range"</span><span class="pun">:</span> <span class="str">"Sheet1!A1:D5"</span><span class="pun">,</span>
  <span class="str">"majorDimension"</span><span class="pun">:</span> <span class="str">"ROWS"</span><span class="pun">,</span>
  <span class="str">"values"</span><span class="pun">:</span> <span class="pun">[</span>
    <span class="pun">[</span><span class="str">"Item"</span><span class="pun">,</span> <span class="str">"Cost"</span><span class="pun">,</span> <span class="str">"Stocked"</span><span class="pun">,</span> <span class="str">"Ship Date"</span><span class="pun">],</span>
    <span class="pun">[</span><span class="str">"Wheel"</span><span class="pun">,</span> <span class="str">"$20.50"</span><span class="pun">,</span> <span class="str">"4"</span><span class="pun">,</span> <span class="str">"3/1/2016"</span><span class="pun">],</span>
    <span class="pun">[</span><span class="str">"Door"</span><span class="pun">,</span> <span class="str">"$15"</span><span class="pun">,</span> <span class="str">"2"</span><span class="pun">,</span> <span class="str">"3/15/2016"</span><span class="pun">],</span>
    <span class="pun">[</span><span class="str">"Engine"</span><span class="pun">,</span> <span class="str">"$100"</span><span class="pun">,</span> <span class="str">"1"</span><span class="pun">,</span> <span class="str">"30/20/2016"</span><span class="pun">],</span>
    <span class="pun">[</span><span class="str">"Totals"</span><span class="pun">,</span> <span class="str">"$135.5"</span><span class="pun">,</span> <span class="str">"7"</span><span class="pun">,</span> <span class="str">"3/20/2016"</span><span class="pun">]</span>
  <span class="pun">],</span>
<span class="pun">}</span>

Note that if you want to specify the entire contents of a page, an identifier such as <span style="color: #242729;">Sheet1</span> is perfectly valid.

See Basic Reading for more information.


As of v4 API, all requests must be accompanied by an identifier (e.g. API key):

Requests to the Google Sheets API for public data must be accompanied by an identifier, which can be an API key or an access token.