Advertisement
phip1611

Google Apps Script by phip1611, ver. 4

Aug 17th, 2014
188
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /* Dieses Skript trägt die aktuellsten Follower- & Profil-Views Zahlen
  2.  * von mir und Guido in ein Google Spreadsheet. Da Google es nicht hinkriegt
  3.  * die Views in die Google Peoples API zu verpacken, muss ich den Umweg über
  4.  * meinen Webserver gehen, da der Inhalt der Google+ Seite "länger" ist, als
  5.  * das ihn Apps Script aufnehmen geschweige denn verarbeiten kann.
  6.  
  7.  * Autor:   Philipp "Phip" Schuster / phip1611
  8.  * Website: http://phip1611.de
  9.  */
  10.  
  11.  
  12. var GOOGLE_API_URL        = "https://www.googleapis.com/plus/v1/people/",
  13.     GOOGLE_API_KEY        = "***",
  14.     GOOGLE_API_URL_PARAMS = "?fields=circledByCount&key="+GOOGLE_API_KEY,
  15.     PHIP1611DE_URL        = "http://*.phip1611.de/*",
  16.     PHIP1611DE_API_KEY    = "***";
  17.    
  18. var activeRow, // aktive Zeile in der Tabelle in die geschrieben wird
  19.     activeRange,
  20.     sheet, // aktives sheet
  21.     date,
  22.     pos = { // die Positionen der Spalten in der Range
  23.       /* In der Tabelle ist abgespeichert, wieviele Einträge vorhanden sind
  24.        * als Indikator für die aktive Zeile */
  25.       "numberOfEntries" : {
  26.         "row"   : 1,
  27.         "column": 14
  28.       },
  29.       "date" : {
  30.         "column": 1
  31.       },
  32.       "phip": {
  33.         "views" : {
  34.           "column" : 3
  35.         },
  36.         "followers" : {
  37.           "column" : 4
  38.         },
  39.         /* Hier werden dann die Wachstumszahlen eingetragen
  40.          * für die Follower und Profil-Views */
  41.         "growth" : {
  42.           "views" : {
  43.             "column" : 2
  44.           },
  45.           "followers" : {
  46.             "column" : 5
  47.           },
  48.         }
  49.       },
  50.       "guido": {
  51.         "views" : {
  52.           "column" : 9
  53.         },
  54.         "followers" : {
  55.           "column" : 10
  56.         },
  57.         /* Hier werden dann die Wachstumszahlen eingetragen
  58.          * für die Follower und Profil-Views */
  59.         "growth" : {
  60.           "views" : {
  61.             "column" : 8
  62.           },
  63.           "followers" : {
  64.             "column" : 11
  65.           },
  66.         }
  67.       },
  68.       /* Hier werden die Vergleichsoperatoren eingetragen
  69.        * für die Follower und Profil-Views der beiden Accounts */
  70.       "comparisonOperators" : {
  71.         "views" : {
  72.           "column" : 6
  73.         },
  74.         "followers" : {
  75.           "column" : 7
  76.         }
  77.       }
  78.     },
  79.     googleProfiles = {
  80.       "phip"  : {
  81.         "ID"        : "***",
  82.         "views"     : 0,
  83.         "followers" : 0
  84.       },
  85.       "guido" : {
  86.         "ID"        : "***",
  87.         "views"     : 0,
  88.         "followers" : 0
  89.       }
  90.     };
  91. /*****************/
  92. // Wird täglich getriggert aufgerufen
  93. function init() {
  94.   //sheet = SpreadsheetApp.getActiveSheet();
  95.   sheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
  96.   run();
  97. };
  98.  
  99. var run = function() {
  100.   setFormattedDate();
  101.   getProfileViews();
  102.   getFollowers();
  103.   getNumberOfEntries();
  104.   writeStatsInSheet();
  105.   calcDifferences();
  106.   setComparisonOperators();
  107.   writeStatsInSheetFour(); // Daten in Tabellenblatt 4 für die Diagramme
  108.   increaseNumberOfEntries();
  109. };
  110.  
  111.  
  112. // Holt die aktuelle Anzahl der Profil-Aufrufe
  113. var getProfileViews = function() {
  114.    var postParam = {
  115.      "key" : PHIP1611DE_API_KEY
  116.    };
  117.    var options = {
  118.      "method" : "post",
  119.      "payload" : postParam
  120.    };
  121.   var responseJSON = JSON.parse(UrlFetchApp.fetch(
  122.       PHIP1611DE_URL, options
  123.   ).toString());
  124.   googleProfiles.phip.views = responseJSON.phip;
  125.   googleProfiles.guido.views = responseJSON.guido;
  126. };
  127.  
  128. // Holt die Anzahl der aktuellen Follower
  129. var getFollowers = function() {
  130.   googleProfiles.phip.followers = JSON.parse(
  131.     UrlFetchApp.fetch(
  132.       GOOGLE_API_URL
  133.     + googleProfiles.phip.ID
  134.     + GOOGLE_API_URL_PARAMS
  135.     ).toString()
  136.   ).circledByCount;
  137.   googleProfiles.guido.followers = JSON.parse(
  138.     UrlFetchApp.fetch(
  139.       GOOGLE_API_URL
  140.     + googleProfiles.guido.ID
  141.     + GOOGLE_API_URL_PARAMS
  142.     ).toString()
  143.   ).circledByCount;
  144. };
  145.  
  146. // bestimmt die aktive Zeile im Sheet
  147. var getNumberOfEntries = function() {
  148.   activeRow = 3 + sheet.getRange(
  149.     pos.numberOfEntries.row, pos.numberOfEntries.column
  150.   ).getCell(1, 1).getValue();
  151. };
  152.  
  153. var setFormattedDate = function() {
  154.   // Danke an Michael L. für den Hinweis auf Utilities.formatDate()!
  155.   date = Utilities.formatDate(new Date(), "GMT+2", "yyyy-MM-dd");
  156.  
  157.   /* Meine alte Code-Version
  158.   var dateObj = new Date();
  159.   dateObj = new Date();
  160.   date = dateObj.getUTCFullYear()+"-";
  161.   if ((dateObj.getUTCMonth()+1) < 10 ) {    // +1, da .getUTCMonth() Ergebnisse [0; 11] liefert
  162.     date = date + "0" + (dateObj.getUTCMonth()+1);  // +1, da .getUTCMonth() Ergebnisse [0; 11] liefert
  163.   } else {
  164.     date = date + dateObj.getUTCMonth()+1;
  165.   }
  166.   date = date+"-";
  167.   if ((dateObj.getUTCDate()) < 10 ) {
  168.     date = date + "0" + dateObj.getUTCDate();
  169.   } else {
  170.     date = date + dateObj.getUTCDate();
  171.   }
  172.   */
  173. };
  174.  
  175. // Schreibt Datum + aktuelle Werte für Follower und Views in die aktuelle Tabellenzeile
  176. var writeStatsInSheet = function() {
  177.   activeRange = sheet.getRange(activeRow, 1, 1, 11);
  178.   activeRange.getCell(1, pos.date.column)
  179.              .setValue("'"+date);
  180.   activeRange.getCell(1, pos.phip.views.column)
  181.              .setValue(googleProfiles.phip.views);
  182.   activeRange.getCell(1, pos.guido.views.column)
  183.              .setValue(googleProfiles.guido.views);
  184.   activeRange.getCell(1, pos.phip.followers.column)
  185.              .setValue(googleProfiles.phip.followers);
  186.   activeRange.getCell(1, pos.guido.followers.column)
  187.              .setValue(googleProfiles.guido.followers);
  188. };
  189.  
  190. // Berechnet die Differenz der Veränderung der Views und Follower im Vergleich zum vorherigen Wert
  191. var calcDifferences = function() {
  192.   var activeRange = sheet.getRange(activeRow-1, 1, 2, 11);
  193.   if (activeRow > 3) { // erst wenn mindestens ein eintrag
  194.     activeRange.getCell(2, pos.phip.growth.views.column)
  195.                .setValue(
  196.                   googleProfiles.phip.views
  197.                 - activeRange.getCell(
  198.                      1, pos.phip.views.column
  199.                   ).getValue()
  200.                 );
  201.     activeRange.getCell(2, pos.guido.growth.views.column)
  202.                .setValue(
  203.                   googleProfiles.guido.views
  204.                 - activeRange.getCell(
  205.                     1, pos.guido.views.column
  206.                   ).getValue()
  207.                 );
  208.     activeRange.getCell(2, pos.phip.growth.followers.column)
  209.                .setValue(
  210.                   googleProfiles.phip.followers
  211.                 - activeRange.getCell(
  212.                     1, pos.phip.followers.column
  213.                   ).getValue()
  214.                 );    
  215.     activeRange.getCell(2, pos.guido.growth.followers.column)
  216.                .setValue(
  217.                  googleProfiles.guido.followers
  218.                - activeRange.getCell(
  219.                    1, pos.guido.followers.column
  220.                  ).getValue()
  221.                );
  222.   } else {
  223.     activeRange.getCell(2, pos.phip.growth.views.column)
  224.                .setValue(0);
  225.     activeRange.getCell(2, pos.guido.growth.views.column)
  226.                .setValue(0);
  227.     activeRange.getCell(2, pos.phip.growth.followers.column)
  228.                .setValue(0);    
  229.     activeRange.getCell(2, pos.guido.growth.followers.column)
  230.                .setValue(0);
  231.   }
  232. };
  233.  
  234. // Setzt Vergleichsoperatoren
  235. var setComparisonOperators = function() {
  236.   var activeRange = sheet.getRange(activeRow, 1, 1, 11);
  237.   if (googleProfiles.phip.views > googleProfiles.guido.views) {
  238.     activeRange.getCell(
  239.       1, pos.comparisonOperators.views.column
  240.     ).setValue(">");
  241.   } else if (googleProfiles.phip.views < googleProfiles.guido.views) {
  242.     activeRange.getCell(
  243.       1, pos.comparisonOperators.views.column
  244.     ).setValue("<");
  245.   } else {
  246.     activeRange.getCell(
  247.       1, pos.comparisonOperators.views.column
  248.     ).setValue("'=");
  249.   }
  250.   if (googleProfiles.phip.followers > googleProfiles.guido.followers) {
  251.     activeRange.getCell(
  252.       1, pos.comparisonOperators.followers.column
  253.     ).setValue(">");
  254.   } else if (googleProfiles.phip.followers < googleProfiles.guido.followers) {
  255.     activeRange.getCell(
  256.       1, pos.comparisonOperators.followers.column
  257.     ).setValue("<");
  258.   } else {
  259.     activeRange.getCell(
  260.       1, pos.comparisonOperators.followers.column
  261.     ).setValue("'=");
  262.   }
  263. };
  264.  
  265. // zählt Zähler für Einträge nach oben
  266. var increaseNumberOfEntries = function() {
  267.   sheet.getRange(
  268.     pos.numberOfEntries.row, pos.numberOfEntries.column
  269.   ).getCell(1, 1)
  270.    .setValue(activeRow-2)
  271. };
  272.  
  273. // In Tabellenblatt 4 sind die Daten in einer Form, wie sie die Diagramme einfach aufnehmen können
  274. var writeStatsInSheetFour = function() {
  275.   var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[3]; // Tabellenblatt 4 mit Log-Daten für Diagramme
  276.   activeRange = sheet.getRange(activeRow-2, 1, 1, 8);
  277.   activeRange.getCell(1, 1).setValue(date);
  278.   activeRange.getCell(1, 1)
  279.              .setValue("'"+date);
  280.   activeRange.getCell(1, 6)
  281.              .setValue("'"+date);
  282.   activeRange.getCell(1, 2)
  283.              .setValue(googleProfiles.phip.views);
  284.   activeRange.getCell(1, 3)
  285.              .setValue(googleProfiles.guido.views);
  286.   activeRange.getCell(1, 7)
  287.              .setValue(googleProfiles.phip.followers);
  288.   activeRange.getCell(1, 8)
  289.              .setValue(googleProfiles.guido.followers);
  290. };
  291.  
  292. function onOpen() {
  293.   var entries = [{
  294.     name : "Manuell Aktualisieren!",
  295.     functionName : "init"
  296.   }];
  297.   SpreadsheetApp.getActiveSpreadsheet().addMenu("Script Center Menü", entries);
  298. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement