phip1611

Google Apps Script by phip1611

Aug 14th, 2014
798
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.   increaseNumberOfEntries();
  108. };
  109.  
  110.  
  111. // Holt die aktuelle Anzahl der Profil-Aufrufe
  112. var getProfileViews = function() {
  113.    var postParam = {
  114.      "key" : PHIP1611DE_API_KEY
  115.    };
  116.    var options = {
  117.      "method" : "post",
  118.      "payload" : postParam
  119.    };
  120.   var responseJSON = JSON.parse(UrlFetchApp.fetch(
  121.       PHIP1611DE_URL, options
  122.   ).toString());
  123.   googleProfiles.phip.views = responseJSON.phip;
  124.   googleProfiles.guido.views = responseJSON.guido;
  125. };
  126.  
  127. // Holt die Anzahl der aktuellen Follower
  128. var getFollowers = function() {
  129.   googleProfiles.phip.followers = JSON.parse(
  130.     UrlFetchApp.fetch(
  131.       GOOGLE_API_URL
  132.     + googleProfiles.phip.ID
  133.     + GOOGLE_API_URL_PARAMS
  134.     ).toString()
  135.   ).circledByCount;
  136.   googleProfiles.guido.followers = JSON.parse(
  137.     UrlFetchApp.fetch(
  138.       GOOGLE_API_URL
  139.     + googleProfiles.guido.ID
  140.     + GOOGLE_API_URL_PARAMS
  141.     ).toString()
  142.   ).circledByCount;
  143. };
  144.  
  145. // bestimmt die aktive Zeile im Sheet
  146. var getNumberOfEntries = function() {
  147.   activeRow = 3 + sheet.getRange(
  148.     pos.numberOfEntries.row, pos.numberOfEntries.column
  149.   ).getCell(1, 1).getValue();
  150. };
  151.  
  152. var setFormattedDate = function() {
  153.   // Danke an Michael L. für den Hinweis auf Utilities.formatDate()!
  154.   date = Utilities.formatDate(new Date(), "GMT+2", "yyyy-MM-dd");
  155.  
  156.   /* Meine alte Code-Version
  157.   var dateObj = new Date();
  158.   dateObj = new Date();
  159.   date = dateObj.getUTCFullYear()+"-";
  160.   if ((dateObj.getUTCMonth()+1) < 10 ) {    // +1, da .getUTCMonth() Ergebnisse [0; 11] liefert
  161.     date = date + "0" + (dateObj.getUTCMonth()+1);  // +1, da .getUTCMonth() Ergebnisse [0; 11] liefert
  162.   } else {
  163.     date = date + dateObj.getUTCMonth()+1;
  164.   }
  165.   date = date+"-";
  166.   if ((dateObj.getUTCDate()) < 10 ) {
  167.     date = date + "0" + dateObj.getUTCDate();
  168.   } else {
  169.     date = date + dateObj.getUTCDate();
  170.   }
  171.   */
  172. };
  173.  
  174. // Schreibt Datum + aktuelle Werte für Follower und Views in die aktuelle Tabellenzeile
  175. var writeStatsInSheet = function() {
  176.   activeRange = sheet.getRange(activeRow, 1, 1, 11);
  177.   activeRange.getCell(1, pos.date.column)
  178.              .setValue("'"+date);
  179.   activeRange.getCell(1, pos.phip.views.column)
  180.              .setValue(googleProfiles.phip.views);
  181.   activeRange.getCell(1, pos.guido.views.column)
  182.              .setValue(googleProfiles.guido.views);
  183.   activeRange.getCell(1, pos.phip.followers.column)
  184.              .setValue(googleProfiles.phip.followers);
  185.   activeRange.getCell(1, pos.guido.followers.column)
  186.              .setValue(googleProfiles.guido.followers);
  187. };
  188.  
  189. // Berechnet die Differenz der Veränderung der Views und Follower im Vergleich zum vorherigen Wert
  190. var calcDifferences = function() {
  191.   var activeRange = sheet.getRange(activeRow-1, 1, 2, 11);
  192.   if (activeRow > 3) { // erst wenn mindestens ein eintrag
  193.     activeRange.getCell(2, pos.phip.growth.views.column)
  194.                .setValue(
  195.                   googleProfiles.phip.views
  196.                 - activeRange.getCell(
  197.                      1, pos.phip.views.column
  198.                   ).getValue()
  199.                 );
  200.     activeRange.getCell(2, pos.guido.growth.views.column)
  201.                .setValue(
  202.                   googleProfiles.guido.views
  203.                 - activeRange.getCell(
  204.                     1, pos.guido.views.column
  205.                   ).getValue()
  206.                 );
  207.     activeRange.getCell(2, pos.phip.growth.followers.column)
  208.                .setValue(
  209.                   googleProfiles.phip.followers
  210.                 - activeRange.getCell(
  211.                     1, pos.phip.followers.column
  212.                   ).getValue()
  213.                 );    
  214.     activeRange.getCell(2, pos.guido.growth.followers.column)
  215.                .setValue(
  216.                  googleProfiles.guido.followers
  217.                - activeRange.getCell(
  218.                    1, pos.guido.followers.column
  219.                  ).getValue()
  220.                );
  221.   } else {
  222.     activeRange.getCell(2, pos.phip.growth.views.column)
  223.                .setValue(0);
  224.     activeRange.getCell(2, pos.guido.growth.views.column)
  225.                .setValue(0);
  226.     activeRange.getCell(2, pos.phip.growth.followers.column)
  227.                .setValue(0);    
  228.     activeRange.getCell(2, pos.guido.growth.followers.column)
  229.                .setValue(0);
  230.   }
  231. };
  232.  
  233. // Setzt Vergleichsoperatoren
  234. var setComparisonOperators = function() {
  235.   var activeRange = sheet.getRange(activeRow, 1, 1, 11);
  236.   if (googleProfiles.phip.views > googleProfiles.guido.views) {
  237.     activeRange.getCell(
  238.       1, pos.comparisonOperators.views.column
  239.     ).setValue(">");
  240.   } else if (googleProfiles.phip.views < googleProfiles.guido.views) {
  241.     activeRange.getCell(
  242.       1, pos.comparisonOperators.views.column
  243.     ).setValue("<");
  244.   } else {
  245.     activeRange.getCell(
  246.       1, pos.comparisonOperators.views.column
  247.     ).setValue("'=");
  248.   }
  249.   if (googleProfiles.phip.followers > googleProfiles.guido.followers) {
  250.     activeRange.getCell(
  251.       1, pos.comparisonOperators.followers.column
  252.     ).setValue(">");
  253.   } else if (googleProfiles.phip.followers < googleProfiles.guido.followers) {
  254.     activeRange.getCell(
  255.       1, pos.comparisonOperators.followers.column
  256.     ).setValue("<");
  257.   } else {
  258.     activeRange.getCell(
  259.       1, pos.comparisonOperators.followers.column
  260.     ).setValue("'=");
  261.   }
  262. };
  263.  
  264. // zählt Zähler für Einträge nach oben
  265. var increaseNumberOfEntries = function() {
  266.   sheet.getRange(
  267.     pos.numberOfEntries.row, pos.numberOfEntries.column
  268.   ).getCell(1, 1)
  269.    .setValue(activeRow-2)
  270. };
  271.  
  272.  
  273. function onOpen() {
  274.   var entries = [{
  275.     name : "Manuell Aktualisieren!",
  276.     functionName : "init"
  277.   }];
  278.   SpreadsheetApp.getActiveSpreadsheet().addMenu("Script Center Menü", entries);
  279. };
RAW Paste Data