App script
function doGet(e) {
var action = e.parameter.action;
if(action=="getNews"){
return getNews(e);
}
if(action=="addView"){
return addView(e);
}
if(action=="report"){
return reportNews(e);
}
return ContentService.createTextOutput("API Running");
}
function doPost(e){
var data=JSON.parse(e.postData.contents);
if(data.action=="postNews"){
return postNews(data);
}
}
/* POST NEWS */
function postNews(data){
var sheet=SpreadsheetApp.getActiveSpreadsheet().getSheetByName("NEWS");
var id=new Date().getTime();
sheet.appendRow([
id,
data.headline,
data.text,
data.username,
data.photo,
data.email,
data.latitude,
data.longitude,
new Date().getTime(),
0,
0
]);
return ContentService.createTextOutput("posted");
}
/* GET NEWS */
function getNews(e){
var lat=parseFloat(e.parameter.lat);
var lon=parseFloat(e.parameter.lon);
var sheet=SpreadsheetApp.getActiveSpreadsheet().getSheetByName("NEWS");
var data=sheet.getDataRange().getValues();
var result=[];
var now=new Date().getTime();
for(var i=1;i<data.length;i++){
var row=data[i];
var id=row[0];
var headline=row[1];
var text=row[2];
var email=row[3];
var nlat=row[4];
var nlon=row[5];
var time=row[6];
var views=row[7];
var reports=row[8];
var distance=getDistance(lat,lon,nlat,nlon);
var hours=(now-time)/3600000;
/* 5km limit */
if(distance<=5 && hours<=24){
result.push({
id:id,
headline:headline,
text:text,
time:time,
views:views
});
}
}
/* SORT BY VIEWS */
result.sort(function(a,b){
return b.views-a.views;
});
/* LIMIT 100 */
result=result.slice(0,100);
return ContentService
.createTextOutput(JSON.stringify(result))
.setMimeType(ContentService.MimeType.JSON);
}
/* VIEW COUNT */
function addView(e){
var id=e.parameter.id;
var sheet=SpreadsheetApp.getActiveSpreadsheet().getSheetByName("NEWS");
var data=sheet.getDataRange().getValues();
for(var i=1;i<data.length;i++){
if(data[i][0]==id){
var views=data[i][7];
sheet.getRange(i+1,8).setValue(views+1);
break;
}
}
return ContentService.createTextOutput("view added");
}
/* REPORT SYSTEM */
function reportNews(e){
var id=e.parameter.id;
var sheet=SpreadsheetApp.getActiveSpreadsheet().getSheetByName("NEWS");
var data=sheet.getDataRange().getValues();
for(var i=1;i<data.length;i++){
if(data[i][0]==id){
var reports=data[i][8]+1;
sheet.getRange(i+1,9).setValue(reports);
/* DELETE IF 5 REPORT */
if(reports>=5){
sheet.deleteRow(i+1);
}
break;
}
}
return ContentService.createTextOutput("reported");
}
/* DISTANCE CALCULATION */
function getDistance(lat1, lon1, lat2, lon2) {
var R = 6371;
var dLat = (lat2-lat1) * Math.PI/180;
var dLon = (lon2-lon1) * Math.PI/180;
var a =
Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.cos(lat1 * Math.PI/180) * Math.cos(lat2 * Math.PI/180) *
Math.sin(dLon/2) * Math.sin(dLon/2);
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
var d = R * c;
return d;
}
/* AUTO DELETE OLD NEWS */
function deleteOldNews(){
var sheet=SpreadsheetApp.getActiveSpreadsheet().getSheetByName("NEWS");
var data=sheet.getDataRange().getValues();
var now=new Date().getTime();
for(var i=data.length-1;i>0;i--){
var time=data[i][6];
var hours=(now-time)/3600000;
if(hours>24){
sheet.deleteRow(i+1);
}
}
}