Coastlines/abogaard-matlab2gsheets-6d7.../RunOnce.m

94 lines
4.3 KiB
Matlab

function RunOnce(client_id, client_secret)
% This function collects access tokens for Google API access using OAuth2
% certification gathered from https://console.developers.google.com/ after
% enabling the Google Drive and Sheet API.
% usage: RunOnce(client_id, client_secret)
%
% A mat file, google_tokens.mat is created by this file and used by future
% calls to mat2sheets. Therefore it must be in MATLAB's scope.
%
% This is essentially a wrapper for Claudiu Giurumescu's function from the
% project:
% https://www.mathworks.com/matlabcentral/fileexchange/31221-matlab-to-google-spreadsheets
%
% andrew robert bogaard 28 sept 2016
% get token for Google Sheets
scope_sheets = 'https://www.googleapis.com/auth/spreadsheets';
[aSheets,rSheets,tSheets] = getAccessToken(client_id, client_secret, scope_sheets);
save('google_tokens.mat', 'client_id', 'client_secret', 'aSheets', 'rSheets', 'tSheets');
function [access_token,refresh_token,token_type]=getAccessToken(client_id, client_secret, scope)
% function by Claudiu
deviceCodeString=urlread('https://accounts.google.com/o/oauth2/device/code','POST', {'client_id', client_id, 'scope', scope});
device_code=[];
user_code=[];
verification_url=[];
reply_commas=[1 strfind(deviceCodeString,',') length(deviceCodeString)];
for i=1:length(reply_commas)-1
if ~isempty(strfind(deviceCodeString(reply_commas(i):reply_commas(i+1)),'device_code'))
tmp=deviceCodeString(reply_commas(i):reply_commas(i+1));
index_tmp_colon=strfind(tmp,':');
tmp=tmp(index_tmp_colon+1:end); clear index_tmp_colon;
index_quotes=find(tmp=='"');
device_code=tmp(index_quotes(1)+1:index_quotes(2)-1); clear index_quotes tmp;
end
if ~isempty(strfind(deviceCodeString(reply_commas(i):reply_commas(i+1)),'user_code'))
tmp=deviceCodeString(reply_commas(i):reply_commas(i+1));
index_tmp_colon=strfind(tmp,':');
tmp=tmp(index_tmp_colon+1:end); clear index_tmp_colon;
index_quotes=find(tmp=='"');
user_code=tmp(index_quotes(1)+1:index_quotes(2)-1); clear index_quotes tmp;
end
if ~isempty(strfind(deviceCodeString(reply_commas(i):reply_commas(i+1)),'verification_url'))
tmp=deviceCodeString(reply_commas(i):reply_commas(i+1));
index_tmp_colon=strfind(tmp,':');
tmp=tmp(index_tmp_colon+1:end); clear index_tmp_colon;
index_quotes=find(tmp=='"');
verification_url=tmp(index_quotes(1)+1:index_quotes(2)-1); clear index_quotes tmp;
end
end
display(['Open your browser and navigate to ' verification_url]);
display(['When prompted enter the user code ' user_code]);
input('Press any key when the above steps were successfully completed to continue ');
accessTokenString=urlread('https://accounts.google.com/o/oauth2/token','POST', ...
{'client_id', client_id, 'client_secret', client_secret, 'code', device_code, 'grant_type', 'http://oauth.net/grant_type/device/1.0'});
access_token=[];
refresh_token=[];
token_type=[];
reply_commas=[1 strfind(accessTokenString,',') length(accessTokenString)];
for i=1:length(reply_commas)-1
if ~isempty(strfind(accessTokenString(reply_commas(i):reply_commas(i+1)),'access_token'))
tmp=accessTokenString(reply_commas(i):reply_commas(i+1));
index_tmp_colon=strfind(tmp,':');
tmp=tmp(index_tmp_colon+1:end); clear index_tmp_colon;
index_quotes=find(tmp=='"');
access_token=tmp(index_quotes(1)+1:index_quotes(2)-1); clear index_quotes tmp;
end
if ~isempty(strfind(accessTokenString(reply_commas(i):reply_commas(i+1)),'token_type'))
tmp=accessTokenString(reply_commas(i):reply_commas(i+1));
index_tmp_colon=strfind(tmp,':');
tmp=tmp(index_tmp_colon+1:end); clear index_tmp_colon;
index_quotes=find(tmp=='"');
token_type=tmp(index_quotes(1)+1:index_quotes(2)-1); clear index_quotes tmp;
end
if ~isempty(strfind(accessTokenString(reply_commas(i):reply_commas(i+1)),'refresh_token'))
tmp=accessTokenString(reply_commas(i):reply_commas(i+1));
index_tmp_colon=strfind(tmp,':');
tmp=tmp(index_tmp_colon+1:end); clear index_tmp_colon;
index_quotes=find(tmp=='"');
refresh_token=tmp(index_quotes(1)+1:index_quotes(2)-1); clear index_quotes tmp;
end
end