Last active
October 25, 2018 05:47
-
-
Save basictomonokai/bbfe4a5f79e6a1f5c93b4511ea66f601 to your computer and use it in GitHub Desktop.
ツイッター、Googleカスタムサーチ、youtube、はてなブックマーク、koboを検索してhatenaブログに投稿
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function microghymainfm01() { | |
// ツイッター、Googleカスタムサーチ、youtube、はてなブックマーク、koboを検索してhatenaブログに出力する | |
// Googleカスタムサーチ 検索ワード | |
var words = [ | |
'micro:bit', | |
'micro:bit site:qiita.com', | |
'micro:bit site:teratail.com', | |
'micro:bit site:chiebukuro.yahoo.co.jp', | |
]; | |
var kekka = ''; | |
// 検索ワード分カスタムサーチする | |
for (var i = 0; i < words.length; i++) { | |
// Logger.log(words[i]); | |
kekka += gcsget(words[i]) | |
} | |
// はてなブックマークRSS検索 | |
var hkekka = hatenabook(); | |
kekka = kekka + hkekka; | |
// youtube検索 | |
var ykekka = youtubesr(); | |
// カスタムサーチ結果+youtube検索結果 | |
kekka += ykekka; | |
// twitter検索 | |
var tkekka = twsrch(); | |
kekka = tkekka+kekka; | |
// kobo検索 | |
var kkekka = kobosr(); | |
kekka = kekka+kkekka; | |
// メール送信呼び出し | |
sendMailHatena(kekka); | |
} | |
function sendMailHatena(honbun) { | |
// メール送信処理 | |
// はてなブログメール投稿用アドレス | |
var toHatena = 'aaaaa@blog.hatena.ne.jp'; | |
// ブログの件名 | |
var titleBlog = 'micro:bit新着情報('+ Utilities.formatDate(new Date(), 'JST', 'yyyy/MM/dd') + ')'; | |
// はてなブログメール投稿用アドレスに送信 | |
MailApp.sendEmail(toHatena,titleBlog, honbun, | |
{ name: '自動投稿ツール', | |
}); | |
Logger.log('メール送信実行終了'); | |
} | |
function gcsget(p1){ | |
//Google カスタム検索 | |
//検索ワードセット | |
var word = p1; | |
var apiKey = 'ggggggggg'; //apiキー | |
var apiUrl = 'https://www.googleapis.com/customsearch/v1/'; | |
var query = '?q='+ encodeURIComponent(word); | |
query += '&cx=' + 'bbbbbbbb'; //カスタム検索エンジンID | |
query += '&key='+apiKey; | |
// 日付順 | |
query += '&sort=date'; | |
// 日本語 | |
query += '&lr=lang_ja'; | |
apiUrl = apiUrl + query; | |
var response = UrlFetchApp.fetch(apiUrl); | |
if (response.getResponseCode() !== 200) { | |
throw new Error('エラーのため取得できませんでした'); | |
} else { | |
var res = JSON.parse(response); | |
} | |
//データを取得する | |
try { | |
//検索合計数を取得する | |
var totalResults = res.queries["request"][0]["totalResults"].toString(); | |
//ログ出力 | |
Logger.log('合計検索数:'+totalResults); | |
Logger.log('表示可能検索数:'+res.items.length); | |
//タイトル名,URL,概要取得 | |
var out = ''; | |
for (var i = 0; i < res.items.length; i++) { | |
out += '*'+res.items[i]["title"].toString()+'(🔍)\n'; | |
out += 'URL:'+res.items[i]["link"].toString()+'\n'; | |
out += '概要:'+res.items[i]["snippet"].toString().replace(/\n/g,'').replace(/</g,'<').replace(/>/g,'>')+'\n\n'; | |
} | |
// Logger.log(out); | |
return out; | |
} catch(e) { | |
return e.toString(); | |
} | |
} | |
function youtubesr() { | |
// youtube検索 | |
var url1 = 'https://www.googleapis.com/youtube/v3/search?part=snippet&type=video&q='; | |
var url2 = encodeURIComponent('micro:bit'); | |
var url3 = '&order=date&key=ccccccccccccc'; | |
var url = url1 + url2 + url3; | |
var jsonYoutube = UrlFetchApp.fetch(url).getContentText(); | |
// Logger.log(jsonYoutube); | |
var video = JSON.parse(jsonYoutube); | |
// Logger.log(video.items.length); | |
youtube = ''; | |
// 取得件数は最大5件 | |
for (var i=0; i < video.items.length; i++) { | |
//タイトル名,画像,URL,概要取得 | |
// はてな記法 * 見出し [~:] 画像 | |
youtube += '*'+video.items[i].snippet.title+'(📺)\n'; | |
youtube += '[https://i.ytimg.com/vi/' + video.items[i].id.videoId + '/default.jpg:image]'+'\n'; | |
youtube += 'URL:'+'https://www.youtube.com/watch?v='+video.items[i].id.videoId+'\n'; | |
youtube += '概要:【'+video.items[i].snippet.channelTitle+'】'+video.items[i].snippet.description+'\n\n'; | |
} | |
return youtube; | |
} | |
function twsrch() { | |
// ツイッター検索 | |
// oauth1ライブラリ呼び出し | |
Logger.log('twsrch'); | |
var service = getTwitterService(); | |
if (service.hasAccess()) { | |
// var res = service.fetch("https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=qiita"); | |
var twitterSearchUrl1 = 'https://api.twitter.com/1.1/search/tweets.json?q='; | |
var twitterSearchWord = encodeURIComponent('\"micro:bit\"'); | |
var twitterSearchUrl2 = '&lang=ja&result_type=recent'; | |
var twitterSearchUrlAll = twitterSearchUrl1 + encodeURI(twitterSearchWord) + twitterSearchUrl2; | |
var res = service.fetch(twitterSearchUrlAll); | |
var json = JSON.parse(res) | |
Logger.log(json.statuses.length); | |
var twkekka = ''; | |
for (var i=0; i < json.statuses.length; i++) { | |
// ユーザー名,ツイートURL,ツイート取得 | |
// はてな記法 * 見出し [~:] 画像 | |
twkekka += '*'+json.statuses[i].user.name+'(🐦)\n'; | |
twkekka += 'ツイートURL:'+'https://twitter.com/i/web/status/'+json.statuses[i].id_str+'\n'; | |
twkekka += 'ツイート:'+json.statuses[i].text+'\n\n'; | |
}; | |
return twkekka; | |
} else { | |
var authorizationUrl = service.authorize(); | |
Logger.log('Open the following URL and re-run the script: %s', | |
authorizationUrl); | |
} | |
} | |
function getTwitterService() { | |
Logger.log('getTwitterService'); | |
return OAuth1.createService("Twitter") | |
.setAccessTokenUrl("https://api.twitter.com/oauth/access_token") | |
.setRequestTokenUrl("https://api.twitter.com/oauth/request_token") | |
.setAuthorizationUrl("https://api.twitter.com/oauth/authorize") | |
.setCallbackFunction('authCallback') | |
.setConsumerKey("ddddddddd") | |
.setConsumerSecret("eeeeeeeeeee") | |
.setPropertyStore(PropertiesService.getUserProperties()) | |
.setAccessToken("fffffffff", "gggggggggg"); // これだよ!! | |
}; | |
function kobosr() { | |
// kobo書籍検索 | |
var url1 = 'https://app.rakuten.co.jp/services/api/Kobo/EbookSearch/20140811?format=json&keyword='; | |
var url2 = encodeURIComponent('micro:bit'); | |
var url3 = '&language=JA&hits=5&sort=-releaseDate&applicationId=hhhhhhhhh'; | |
var url = url1 + url2 + url3; | |
var jsonKobo = UrlFetchApp.fetch(url).getContentText(); | |
// Logger.log(jsonKobo); | |
var book = JSON.parse(jsonKobo); | |
Logger.log(book.Items.length); | |
var kobo = ''; | |
// 取得件数は最大5件 | |
for (var i=0; i < book.Items.length; i++) { | |
//タイトル名,画像,URL,著者,概要取得 | |
// はてな記法 * 見出し [~:] 画像 | |
kobo += '*'+book.Items[i].Item.title+'(📖)\n'; | |
kobo += '['+ book.Items[i].Item.smallImageUrl.replace('?_ex=64x64','') +':image:w64]'+'\n'; | |
kobo += 'URL:'+book.Items[i].Item.itemUrl+'\n'; | |
kobo += '概要:【'+book.Items[i].Item.author+' 著】'+book.Items[i].Item.itemCaption+'\n\n'; | |
} | |
return kobo; | |
} | |
function hatenabook() { | |
var rss = 'http://b.hatena.ne.jp/search/text?q=micro%3abit&mode=rss&users=10&sort=recent'; | |
var resrss = fetchTodayPosts(rss); | |
var out = ''; | |
// Logger.log(resrss[0][0]); | |
var reshatenacnt = 5; | |
if (resrss.length < 5) { | |
reshatenacnt = resrss.length; | |
}; | |
for (var i = 0; i < reshatenacnt; i++) { | |
// 件名,URL,概要取得 | |
// はてな記法 * 見出し | |
out += '*'+resrss[i][0].toString()+'(📑)\n'; | |
out += 'URL:'+resrss[i][1].toString()+'\n'; | |
out += '概要:'+resrss[i][2].replace(/\n/g,'').replace(/</g,'<').replace(/>/g,'>')+'\n\n'; | |
} | |
return out; | |
} | |
function fetchTodayPosts(feedUrl) { | |
var response = UrlFetchApp.fetch(feedUrl); | |
var rssXML = response.getContentText(); | |
var document = XmlService.parse(rssXML); | |
var root = document.getRootElement(); | |
var ns_rss = XmlService.getNamespace('http://purl.org/rss/1.0/'); | |
var ns_dc = XmlService.getNamespace('dc', 'http://purl.org/dc/elements/1.1/'); | |
var ns_atom = XmlService.getNamespace('http://www.w3.org/2005/Atom'); | |
var ns_rdf = XmlService.getNamespace('http://www.w3.org/1999/02/22-rdf-syntax-ns#'); | |
var rootTagName = root.getName().toLowerCase(); | |
var entries = []; | |
// 記事のリストを取得 | |
switch (rootTagName) { | |
case 'rdf': // 1.0 | |
entries = root.getChildren('item', ns_rss); | |
break; | |
case 'feed': // atom | |
entries = root.getChildren('entry', ns_atom); | |
break; | |
case 'rss': // 2.0 | |
entries = root.getChild('channel').getChildren('item'); | |
break; | |
default: | |
return false; | |
} | |
return entries.map(function(entry, index) { | |
var title; | |
var link; | |
var desc; | |
var pubDate; | |
switch (rootTagName) { | |
case 'rdf': // 1.0 | |
title = entry.getChild('title', ns_rss).getText(); | |
link = entry.getChild('link', ns_rss).getText(); | |
desc = entry.getChild('description', ns_rss).getText(); | |
pubDate = entry.getChild('date', ns_dc).getText(); | |
break; | |
case 'feed': // atom | |
title = entry.getChild('title', ns_atom).getText(); | |
link = entry.getChild('link', ns_atom).getAttribute('href').getValue(); | |
desc = entry.getChild('description', ns_rss).getText(); | |
pubDate = entry.getChild('updated', ns_atom).getText(); | |
break; | |
case 'rss': // 2.0 | |
title = entry.getChild('title').getText(); | |
link = entry.getChild('link').getText(); | |
desc = entry.getChild('description', ns_rss).getText(); | |
pubDate = entry.getChild('pubDate').getText(); | |
break; | |
} | |
return [title,link,desc]; | |
}).filter(function(item) { | |
return item !== ''; | |
}); | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment