Nugroho's blog.

Thursday, October 22, 2015

List Files and Folder in Certain Folder in Google Drive using Google App Script

 Here it is.

 I used getFolderById() to determine the folder I want to list the files and folders inside.  I used home as variable name of the folder

 home.getFiles() is used to gets a collection of all files in home.

 home.getFolders() is used to gets a collection of all folders in home.

I have list and row  as array or tuple or 'list' to accommodate the result. Maybe it's wasting time to have two variable, but I plan to write code to list 'files and folders inside subfolders' recursively. I know maybe it didn't even need that array variable, :). But just in case...

function listFilesNFolders(form) {
var list = [];
list.push(['tadaa...<br>']);
list.push(['heheh...']);
var row = [];
row.push('<br> Hello World!!! ');
list.push(row);


var home = DriveApp.getFolderById('0BxZS62a5NdNYUGxySmp2QW41OUU');
// Log the name of every file in the user's Drive.
var files = home.getFiles();
list.push('<br>Files:');
while (files.hasNext()) {
var file = files.next();
list.push('<br>-',file.getName());
//Logger.log(file.getName());
}
// Log the name of every folder in the user's Drive.
var folders = home.getFolders();
list.push('<br>Folders:');
while (folders.hasNext()) {
var folder = folders.next();
list.push('<br>-',folder.getName());
//Logger.log(folder.getName());
}


return list;
}

function doGet(e) {
return HtmlService.createHtmlOutputFromFile('form.html');
}


The Form

  <form id="myForm">
<input type="submit"
value="OK"
onclick="
this.value='Proses';
google.script.run.withSuccessHandler(fileUploaded).listFilesNFolders(this.parentNode);
return false;
"
>

</form>

<div id="output"></div>

<script>
function fileUploaded(status) {
document.getElementById('myForm').style.display = 'none';
document.getElementById('output').innerHTML = status;
}
</script>

<style>
input { display:block; margin: 20px; }
</style>

The Result


Hold on, back up!


 Google App Script is fun, :)

 Here's my simple hello world, :)

What I did is create "form", which actually have no form at all, just submit button to activate listFilesNFolders(form) function on script (Code.gs file)

The code will return output 'tadaa...', 'heheh...', and 'Hello World!!!'.

Notice the html formatting, :)



function listFilesNFolders(form) {
var list = [];
list.push(['tadaa...<br>']);
list.push(['heheh...']);
var row = [];
row.push('<br>Hello World!!! ');
list.push(row);


return list;
}

function doGet(e) {
return HtmlService.createHtmlOutputFromFile('form.html');
}

.
 <form id="myForm">
<input type="submit"
value="OK"
onclick="
this.value='Proses';
google.script.run.withSuccessHandler(fileUploaded).listFilesNFolders(this.parentNode);
return false;
"
>
</form>

.



Wednesday, October 21, 2015

#MelawanAsap


 Jika terus-terusan matahari tertutup asap hingga jadi berwarna orange atau malah tidak terlihat sama sekali, saya takut kalo tumbuhan tidak dapat berfotosintesis dengan sempurna dan tidak dapat menghasilkan oksigen yang optimal.

 Sesak karena asap, juga karena kurang oksigen.

 Eh, tunggu..., tumbuhan bukan tak maksimal berfotosintesis, tetapi tidak bisa lagi berfotosintesis, karena sudah jadi arang dan abu, :(

List All Files and Folders into Google Spreadsheet using Google App Script

 I updated my last code, so it will list all folders name too, in addition of files name.

 It will search the files and folders name in certain folder,

 get the name,

 the date it created,

 the size,

 the url address,

 thi file id,

 description,

 and the MIME type (except in folder, I hardcoded it by write string "folder")



 
function uploadFiles(form) {
try {
var dropbox = "Testing";
var folders = DriveApp.getFoldersByName(dropbox);
if (folders.hasNext()) {
var folder = folders.next();
} else {
var folder = DriveApp.createFolder(dropbox);
}
folders = folder.getFoldersByName(form.myNIM);
if(folders.hasNext()){
var anak = folders.next();
} else{
var anak = folder.createFolder(form.myNIM);
}
var blob = form.myFile;
var file = anak.createFile(blob);
file.setDescription("Uploaded by " + form.myName);
// listFilesAndFoldersInFolder(folder)
list_all_files_and_folders_inside_one_folder_without_subfolders()
return "File uploaded successfully " + file.getUrl();

} catch (error) {

return error.toString();
}

}

function list_all_files_and_folders_inside_one_folder_without_subfolders(){
var ss = SpreadsheetApp.openById("11AzGyCcWfvcE_mUltyjAx17wJDghOS-YH5e_zrHT-zc");
SpreadsheetApp.setActiveSpreadsheet(ss);
var sh = SpreadsheetApp.getActiveSheet();
sh.clear();
var folder = DriveApp.getFolderById('0BxZS62a5NdNYUGxySmp2QW41OUU'); // I change the folder ID here
var list = [];
//list.push(['Name','ID','Size']);
list.push(["Name", "Date", "Size", "URL", "Download", "Description", "MIME"]);

var files = folder.getFiles();
while (files.hasNext()){
file = files.next();
var row = []
//row.push(file.getName(),file.getId(),file.getSize());
row.push(file.getName(),
file.getDateCreated(),
file.getSize(),
file.getUrl(),
"https://docs.google.com/uc?export=download&confirm=no_antivirus&id=" + file.getId(),
file.getDescription(),file.getMimeType())

list.push(row);
}
var files = folder.getFolders();
while (files.hasNext()){
file = files.next();
var row = []
//row.push(file.getName(),file.getId(),file.getSize());
row.push(file.getName(),
file.getDateCreated(),
file.getSize(),
file.getUrl(),
"https://docs.google.com/uc?export=download&confirm=no_antivirus&id=" + file.getId(),
file.getDescription(),"folder")

list.push(row);
}

sh.getRange(1,1,list.length,list[0].length).setValues(list);

}

function doGet(e) {
return HtmlService.createHtmlOutputFromFile('form.html');
}



Working with Google Script

 I heard it's powerful,
 it could be integrated with Google Drive,
 so I decided to give it a try.

 Try to make a form Name, NIM, Offering, and a button to upload a file.

 Basically, it's super simple form.

 It will upload file to my Google Drive, place it in folder NIM (or create it if there's no folder match with NIM).

 As addition, I created spreadsheet manually and update its content, the list of files in the folders. (still got a trouble)
 
function uploadFiles(form) {

try {

var dropbox = "Testing";
var folders = DriveApp.getFoldersByName(dropbox);

if (folders.hasNext()) {
var folder = folders.next();
} else {
var folder = DriveApp.createFolder(dropbox);
}

folders = folder.getFoldersByName(form.myNIM);
if(folders.hasNext()){
var anak = folders.next();
} else{
var anak = folder.createFolder(form.myNIM);
}


var blob = form.myFile;
var file = anak.createFile(blob);
file.setDescription("Uploaded by " + form.myName);


listFilesInFolder(folder)


return "File uploaded successfully " + file.getUrl();

} catch (error) {

return error.toString();
}

}

function listFilesInFolder(folderName) {

//var ssNew = SpreadsheetApp.create("Rekap");
//https://drive.google.com/open?id=11AzGyCcWfvcE_mUltyjAx17wJDghOS-YH5e_zrHT-zc
//https://docs.google.com/spreadsheets/d/11AzGyCcWfvcE_mUltyjAx17wJDghOS-YH5e_zrHT-zc/edit#gid=0
//var ss = SpreadsheetApp.openByUrl('https://docs.google.com/spreadsheets/d/abc1234567/edit');
var ss = SpreadsheetApp.openById("11AzGyCcWfvcE_mUltyjAx17wJDghOS-YH5e_zrHT-zc");

SpreadsheetApp.setActiveSpreadsheet(ss);

var activeSpreadsheet = SpreadsheetApp.getActiveSpreadsheet();

/*
var myNewSheet = activeSpreadsheet.getSheetByName("Rekap");

if (myNewSheet != null) {
activeSpreadsheet.deleteSheet(myNewSheet);
}

myNewSheet = activeSpreadsheet.insertSheet();
myNewSheet.setName("Rekap");

*/
//0BxZS62a5NdNYUGxySmp2QW41OUU
//var folder = DriveApp.getFoldersByName(folderName).next();
var id = '0BxZS62a5NdNYUGxySmp2QW41OUU';
var folder = DriveApp.getFolderById(id);
var contents = folder.getFiles();

var file, data, sheet = SpreadsheetApp.getActiveSheet();
sheet.clear();

sheet.appendRow(["Name", "Date", "Size", "URL", "Download", "Description", "Type"]);
//sheet.appendRow(["Tadaa..."])
for (var i = 0; i < contents.length; i++) {

file = contents[i];

if (file.getFileType() == "SPREADSHEET") {
continue;
}

data = [
file.getName(),
file.getDateCreated(),
file.getSize(),
file.getUrl(),
"https://docs.google.com/uc?export=download&confirm=no_antivirus&id=" + file.getId(),
file.getDescription(),
file.getFileType().toString()
];

sheet.appendRow(data);

}

};

function doGet(e) {
return HtmlService.createHtmlOutputFromFile('form.html');
}



The Forms
< form id="myForm">
Nama <input type="text" name="myName" placeholder="Nama">
NIM <input type="text" name="myNIM" placeholder="NIM">
Offering <input type="text" name="myOff" placeholder="Offering">

Upload File<input type="file" name="myFile">
<input type="submit" value="Upload File"
onclick="this.value='Uploading..';
google.script.run.withSuccessHandler(fileUploaded)
.uploadFiles(this.parentNode);
return false;">

</form>

<div id="output"></div>

<script>
function fileUploaded(status) {
document.getElementById('myForm').style.display = 'none';
document.getElementById('output').innerHTML = status;
}
</script>

<style>
input { display:block; margin: 20px; }
</style>



.

DriveApp don't have getFileType() so I used file.getMimeType() instead, :)

 

function list_all_files_inside_one_folder_without_subfolders(){
var ss = SpreadsheetApp.openById("11AzGyCcWfvcE_mUltyjAx17wJDghOS-YH5e_zrHT-zc");
SpreadsheetApp.setActiveSpreadsheet(ss);
var sh = SpreadsheetApp.getActiveSheet();
sh.clear();
var folder = DriveApp.getFolderById('0BxZS62a5NdNYUGxySmp2QW41OUU'); // I change the folder ID here
var list = [];
//list.push(['Name','ID','Size']);
list.push(["Name", "Date", "Size", "URL", "Download", "Description", "MIME"]);

var files = folder.getFiles();
while (files.hasNext()){
file = files.next();
var row = []
//row.push(file.getName(),file.getId(),file.getSize());
row.push(file.getName(),
file.getDateCreated(),
file.getSize(),
file.getUrl(),
"https://docs.google.com/uc?export=download&confirm=no_antivirus&id=" + file.getId(),
file.getDescription(),file.getMimeType())
//file.getFileType().toString())

list.push(row);
}
sh.getRange(1,1,list.length,list[0].length).setValues(list);
}







Tuesday, October 20, 2015

#MelawanAsap

 Pake jasa pawang hujan seluruh Indonesia?

Working with Audio in Python

 What I did is read a .wav file, extract the raw audio data, (I use first 1/20 data for sample), transform it using Fast Fourier Transform, manipulate it (I only use the first cluster frequency spectrum ), transform it back using InverseFFT.

 I use matplotlib and numpy module to plot and compute.

 I also use sys and wave module as 'interface'.


import matplotlib.pyplot as plt
import numpy as np
import wave
import sys


spf = wave.open('violin2.wav','r')

#Extract Raw Audio from Wav File
signal = spf.readframes(-1)
signal = np.fromstring(signal, 'Int16')
fs = spf.getframerate()
print fs

#If Stereo
if spf.getnchannels() == 2:
print 'Just mono files'
sys.exit(0)

Time=np.linspace(0, len(signal)/fs, num=len(signal))
sample = []
st=[]
for i in np.arange(len(signal)/20):
sample.append( signal[i])
st.append(Time[i])

ft=np.fft.fft(sample)
pft=[]
for i in np.arange(len(ft)):
if i<500: data-blogger-escaped-ample="" data-blogger-escaped-else:="" data-blogger-escaped-from="" data-blogger-escaped-ft="" data-blogger-escaped-i="" data-blogger-escaped-ift="" data-blogger-escaped-ignal="" data-blogger-escaped-ime="" data-blogger-escaped-pft.append="" data-blogger-escaped-pft="" data-blogger-escaped-plt.figure="" data-blogger-escaped-plt.grid="" data-blogger-escaped-plt.plot="" data-blogger-escaped-plt.show="" data-blogger-escaped-plt.title="" data-blogger-escaped-pre="" data-blogger-escaped-rue="" data-blogger-escaped-sample="" data-blogger-escaped-signal="" data-blogger-escaped-st="" data-blogger-escaped-wave...="">
.





323f (5) amp (1) android (12) apple (7) arduino (18) art (1) assembler (21) astina (4) ATTiny (23) blackberry (4) camera (3) canon (2) cerita (2) computer (106) crazyness (11) debian (1) delphi (39) diary (286) flash (8) fortran (6) freebsd (6) google apps script (8) guitar (2) HTML5 (10) IFTTT (7) Instagram (7) internet (12) iOS (5) iPad (6) iPhone (5) java (1) javascript (1) keynote (2) LaTeX (6) lazarus (1) linux (29) lion (15) mac (28) macbook air (8) macbook pro (3) macOS (1) Math (3) mathematica (1) maverick (6) mazda (4) microcontroler (35) mountain lion (2) music (37) netbook (1) nugnux (6) os x (36) php (1) Physicist (29) Picture (3) programming (189) Python (109) S2 (13) software (7) Soliloquy (125) Ubuntu (5) unix (4) Video (8) wayang (3) yosemite (3)