week6
This commit is contained in:
parent
3c0a1450a1
commit
de732246dd
69
week6/instagram-search/index.html
Normal file
69
week6/instagram-search/index.html
Normal file
@ -0,0 +1,69 @@
|
||||
<html>
|
||||
<head>
|
||||
<title>SEARCH INSTAGRAM</title>
|
||||
<style>
|
||||
/* CSS Styling */
|
||||
#frame {
|
||||
width: 100%;
|
||||
}
|
||||
#inputs{
|
||||
width: 50em;
|
||||
bborder: 1px solid black;
|
||||
}
|
||||
#map {
|
||||
height: 500px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
</style>
|
||||
<!-- SCRIPTS -->
|
||||
<!-- import jquery -->
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<!-- HTML -->
|
||||
<label>SEARCH INSTAGRAM</label>
|
||||
<div id="frame">
|
||||
<!-- inputs for the search to send to server -->
|
||||
<div id="inputs">
|
||||
<label>user-id: </label>
|
||||
<input id="user_id_field" type="text"/>
|
||||
<label>keyword: </label>
|
||||
<input id="keyword_field" type="text"/>
|
||||
<input id="search_button" type="button" value="Search" onclick="search();">
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- SCRIPTS -->
|
||||
<!-- import socket.io -->
|
||||
<script src="/socket.io/socket.io.js"></script>
|
||||
<script>
|
||||
// connect to localhost on its port (see server.js -- 8088)
|
||||
var socket = io().connect('http://localhost:8088');
|
||||
|
||||
// when connecting
|
||||
socket.on('connect', function (data) {
|
||||
console.log('connected');
|
||||
});
|
||||
|
||||
// when receiving a custom message form the server ('search_instagram_results')
|
||||
socket.on('search_instagram_results', function(msg) {
|
||||
console.log('search_instagram_results: ' + JSON.stringify(msg));
|
||||
});
|
||||
|
||||
// when search button is pressed
|
||||
function search() {
|
||||
|
||||
var input_keyword = document.getElementById('keyword_field').value;
|
||||
var input_user_id = document.getElementById('user_id_field').value;
|
||||
|
||||
socket.emit('search_instagram', {keyword: input_keyword, user_id: input_user_id});
|
||||
|
||||
}
|
||||
|
||||
|
||||
</script>
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
4
week6/instagram-search/instagram_credentials.json
Normal file
4
week6/instagram-search/instagram_credentials.json
Normal file
@ -0,0 +1,4 @@
|
||||
{
|
||||
"client_id": "c566ffdba5224164a7ac0bbf3920cf36",
|
||||
"client_secret": "c186b57d41a74ceb9432dc2cc2a44fa5"
|
||||
}
|
||||
16
week6/instagram-search/package.json
Normal file
16
week6/instagram-search/package.json
Normal file
@ -0,0 +1,16 @@
|
||||
{
|
||||
"name": "instagram-search",
|
||||
"version": "1.0.0",
|
||||
"description": "basic search with instagram api",
|
||||
"main": "server.js",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"author": "gauthier",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"express": "^4.14.0",
|
||||
"nodegram": "^0.2.3",
|
||||
"socket.io": "^1.7.1"
|
||||
}
|
||||
}
|
||||
134
week6/instagram-search/server.js
Normal file
134
week6/instagram-search/server.js
Normal file
@ -0,0 +1,134 @@
|
||||
// import express
|
||||
var express = require('express'); // npm install --save express
|
||||
var app = express();
|
||||
|
||||
// import node.js http
|
||||
var server = require('http').Server(app);
|
||||
|
||||
// import socket.io
|
||||
var io = require('socket.io')(server); // npm install --save socket.io
|
||||
|
||||
// import filesystem (aka fs)
|
||||
var fs = require('fs');
|
||||
|
||||
// import nodegram
|
||||
// https://github.com/zzarcon/nodegram
|
||||
var Nodegram = require('nodegram'); // npm install --save nodegram
|
||||
|
||||
/* -----------------------------------
|
||||
Authetication (OAuth) Configuration
|
||||
--------------------------------------*/
|
||||
|
||||
// access token use to autheticate with Instagram
|
||||
var access_token = null;
|
||||
|
||||
// load configuration file with credentials, secrets, etc.
|
||||
var config_file = "./instagram_credentials.json";
|
||||
var config = JSON.parse(fs.readFileSync(config_file, "utf8"));
|
||||
|
||||
var options = {
|
||||
clientId: config.client_id,
|
||||
clientSecret: config.client_secret,
|
||||
redirectUri: 'http://localhost:8088/callback'
|
||||
}
|
||||
|
||||
var gram = new Nodegram(options);
|
||||
|
||||
app.get('/auth', function authorize_user(req, res) {
|
||||
|
||||
var uri = gram.getAuthUrl();
|
||||
res.redirect(uri);
|
||||
});
|
||||
|
||||
app.get('/callback', function authorize_user(req, res) {
|
||||
|
||||
gram.getAccessToken(req.query.code).then(function(resp) {
|
||||
var token = resp.access_token;
|
||||
access_token = token;
|
||||
console.log(resp.user);
|
||||
res.redirect('/');
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
/*------------------------
|
||||
INSTAGRAM FUNCTIONS
|
||||
--------------------------*/
|
||||
|
||||
function search_for_username(username, callback) {
|
||||
|
||||
// example taken from https://github.com/zzarcon/nodegram
|
||||
|
||||
var instagram = new Nodegram({accessToken: access_token});
|
||||
|
||||
/* ----------------------------------
|
||||
This won't work unless you have
|
||||
accounts are added to the app's
|
||||
sandbox -- re: give you permissions
|
||||
-------------------------------------*/
|
||||
|
||||
instagram.get('/users/search', {q: username}).then(function(res, pag) {
|
||||
|
||||
callback(res);
|
||||
|
||||
}).catch(function(err) {
|
||||
|
||||
console.log(err);
|
||||
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
/* -------------------
|
||||
Configure Socket.io
|
||||
----------------------*/
|
||||
|
||||
// configure socket.io
|
||||
// (1) when there is a connection
|
||||
io.on('connection', function(socket) {
|
||||
|
||||
console.log('got a connection');
|
||||
|
||||
// (2) configure the connected socket to receive custom messages ('message from human')
|
||||
socket.on('search_instagram', function(msg) {
|
||||
|
||||
console.log('searching instagram with: ' + JSON.stringify(msg));
|
||||
|
||||
search_for_username(msg.user_id, function(results) {
|
||||
// send raw results
|
||||
io.emit('search_instagram_results', results);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
socket.on('disconnet', function() {
|
||||
|
||||
console.log('got a disconnection');
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
/* ------------------------------------
|
||||
Main entry point for the server
|
||||
----------------------------------------*/
|
||||
|
||||
app.get('/', function(req, res) {
|
||||
// we the client is not authenticated yet, redirect to /auth (see line: 37)
|
||||
if(access_token === null) {
|
||||
res.redirect('/auth');
|
||||
}
|
||||
// if already autheticated serve index.html
|
||||
else {
|
||||
res.sendFile(__dirname + '/index.html');
|
||||
}
|
||||
});
|
||||
|
||||
/* -------------------
|
||||
Start the server
|
||||
----------------------*/
|
||||
|
||||
// listen to connection on port 8088 --> http://localhost:8088
|
||||
server.listen(8088, function () {
|
||||
console.log('listening on port: ' + 8088);
|
||||
});
|
||||
19
week6/notes.md
Normal file
19
week6/notes.md
Normal file
@ -0,0 +1,19 @@
|
||||
#### (working) notes
|
||||
|
||||
## Instagram:
|
||||
|
||||
Node: [Nodegram](https://github.com/zzarcon/nodegram)
|
||||
|
||||
[Instagram API Documentation](https://www.instagram.com/developer/)
|
||||
|
||||
## Twitter:
|
||||
|
||||
Node: [twitter](https://github.com/desmondmorris/node-twitter)
|
||||
|
||||
[Twitter API Documentation](https://dev.twitter.com/rest/public)
|
||||
|
||||
## Spotify:
|
||||
|
||||
Node: [Spotify Web API Node](https://github.com/thelinmichael/spotify-web-api-node)
|
||||
|
||||
[Spotify API Documentation](https://developer.spotify.com/web-api/)
|
||||
113
week6/spotify-search/index.html
Normal file
113
week6/spotify-search/index.html
Normal file
@ -0,0 +1,113 @@
|
||||
<html>
|
||||
<head>
|
||||
<title>SEARCH SPOTIFY</title>
|
||||
<style>
|
||||
/* CSS Styling */
|
||||
#frame {
|
||||
width: 100%;
|
||||
}
|
||||
#inputs{
|
||||
width: 50em;
|
||||
}
|
||||
.track {
|
||||
bborder: 1px solid green;
|
||||
display: inline-block;
|
||||
padding: 1em;
|
||||
max-width: 400px;
|
||||
vertical-align: top;
|
||||
}
|
||||
.track img {
|
||||
max-width: 400px;
|
||||
margin: 0.3em;
|
||||
}
|
||||
</style>
|
||||
<!-- SCRIPTS -->
|
||||
<!-- import handlebars -->
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/handlebars.js/4.0.5/handlebars.min.js"></script>
|
||||
<!-- import jquery -->
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<!-- HTML -->
|
||||
<label>SEARCH SPOTIFY</label>
|
||||
<div id="frame">
|
||||
<!-- inputs for the search to send to server -->
|
||||
<div id="inputs">
|
||||
<label>keyword: </label>
|
||||
<input id="keyword_field" type="text"/>
|
||||
<input id="search_button" type="button" value="Search" onclick="search();">
|
||||
</div>
|
||||
|
||||
<div id="tracks">
|
||||
<script id="tracks-template" type="text/x-handlebars-template">
|
||||
{{#each this}}
|
||||
<div class="track">
|
||||
<div class="Artist">Artist: {{artist}}</div>
|
||||
<div class="Album">Album: {{album}}</div>
|
||||
<div class="Image"><img src={{album_url}} /></div>
|
||||
</div>
|
||||
{{/each}}
|
||||
</script>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- SCRIPTS -->
|
||||
<!-- import socket.io -->
|
||||
<script src="/socket.io/socket.io.js"></script>
|
||||
<script>
|
||||
// connect to localhost on its port (see server.js -- 8088)
|
||||
var socket = io().connect('http://localhost:8088');
|
||||
|
||||
// when connecting
|
||||
socket.on('connect', function (data) {
|
||||
console.log('connected');
|
||||
});
|
||||
|
||||
// when receiving a custom message form the server ('search_SPOTIFY_results')
|
||||
socket.on('search_spotify_results', function(msg) {
|
||||
console.log('search_spotify_results: ' + JSON.stringify(msg));
|
||||
|
||||
var filtered_results = [];
|
||||
|
||||
for(t of msg) {
|
||||
// console.log('\n\n\n\n\n --------------------')
|
||||
// console.log(t);
|
||||
filtered_results.push({
|
||||
artist: t.artists[0].name,
|
||||
album: t.album.name,
|
||||
album_url: t.album.images[0].url
|
||||
});
|
||||
}
|
||||
|
||||
compile_results_and_dispay(filtered_results);
|
||||
|
||||
});
|
||||
|
||||
// when search button is pressed
|
||||
function search() {
|
||||
|
||||
var input_keyword = document.getElementById('keyword_field').value;
|
||||
|
||||
socket.emit('search_spotify', {keyword: input_keyword});
|
||||
|
||||
}
|
||||
|
||||
function compile_results_and_dispay(results) {
|
||||
|
||||
var template_script = $("#tracks-template").html();
|
||||
|
||||
var template = Handlebars.compile(template_script);
|
||||
|
||||
$('.track').remove();
|
||||
|
||||
$('#tracks').append(template(results));
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
</script>
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
16
week6/spotify-search/package.json
Normal file
16
week6/spotify-search/package.json
Normal file
@ -0,0 +1,16 @@
|
||||
{
|
||||
"name": "spotify",
|
||||
"version": "1.0.0",
|
||||
"description": "spotify api sandbox",
|
||||
"main": "server.js",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"author": "gauthier",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"express": "^4.14.0",
|
||||
"socket.io": "^1.7.1",
|
||||
"spotify-web-api-node": "^2.3.6"
|
||||
}
|
||||
}
|
||||
109
week6/spotify-search/server.js
Normal file
109
week6/spotify-search/server.js
Normal file
@ -0,0 +1,109 @@
|
||||
// import express
|
||||
var express = require('express'); // npm install --save express
|
||||
var app = express();
|
||||
|
||||
// import node.js http
|
||||
var server = require('http').Server(app);
|
||||
|
||||
// import socket.io
|
||||
var io = require('socket.io')(server); // npm install --save socket.io
|
||||
|
||||
// import filesystem (aka fs)
|
||||
var fs = require('fs');
|
||||
|
||||
// import spotify we api
|
||||
var SpotifyWebApi = require('spotify-web-api-node');
|
||||
|
||||
/* -----------------------------------
|
||||
Spotify Authetication (OAuth) Configuration
|
||||
--------------------------------------*/
|
||||
|
||||
// access token use to autheticate with Instagram
|
||||
var access_token = null;
|
||||
|
||||
// load configuration file with credentials, secrets, etc.
|
||||
var config_file = "./spotify_credentials.json";
|
||||
var config = JSON.parse(fs.readFileSync(config_file, "utf8"));
|
||||
|
||||
var spotify = new SpotifyWebApi({
|
||||
clientId : config.client_id,
|
||||
clientSecret : config.client_secret
|
||||
});
|
||||
|
||||
|
||||
spotify.clientCredentialsGrant()
|
||||
.then(function(data) {
|
||||
spotify.setAccessToken(data.body.access_token);
|
||||
}, function(err) {
|
||||
console.log('Something went wrong when retrieving an access token', err.message);
|
||||
});
|
||||
|
||||
/*------------------------
|
||||
SPOTIFY FUNCTIONS
|
||||
--------------------------*/
|
||||
|
||||
function search_for_tracks(keyword, callback) {
|
||||
|
||||
console.log('search_for_tracks: ' + keyword);
|
||||
|
||||
spotify.searchTracks(keyword, null, function(err, data) {
|
||||
|
||||
if (err) {
|
||||
console.error('Something went wrong', err.message);
|
||||
return;
|
||||
}
|
||||
|
||||
callback(data.body.tracks.items);
|
||||
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* -----------------------------
|
||||
Configure Socket.io
|
||||
--------------------------------*/
|
||||
|
||||
// configure socket.io
|
||||
// (1) when there is a connection
|
||||
io.on('connection', function(socket) {
|
||||
|
||||
console.log('got a connection');
|
||||
|
||||
// (2) configure the connected socket to receive custom messages ('message from human')
|
||||
socket.on('search_spotify', function(msg) {
|
||||
|
||||
console.log('searching spotify with: ' + JSON.stringify(msg));
|
||||
|
||||
search_for_tracks(msg.keyword, function(results) {
|
||||
// send raw results
|
||||
io.emit('search_spotify_results', results);
|
||||
});
|
||||
|
||||
|
||||
});
|
||||
|
||||
socket.on('disconnet', function() {
|
||||
|
||||
console.log('got a disconnection');
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
/* ------------------------------------
|
||||
Main entry point for the server
|
||||
----------------------------------------*/
|
||||
|
||||
app.get('/', function(req, res) {
|
||||
res.sendFile(__dirname + '/index.html');
|
||||
});
|
||||
|
||||
/* -------------------
|
||||
Start the server
|
||||
----------------------*/
|
||||
|
||||
// listen to connection on port 8088 --> http://localhost:8088
|
||||
server.listen(8088, function () {
|
||||
console.log('listening on port: ' + 8088);
|
||||
});
|
||||
4
week6/spotify-search/spotify_credentials.json
Normal file
4
week6/spotify-search/spotify_credentials.json
Normal file
@ -0,0 +1,4 @@
|
||||
{
|
||||
"client_id": "503a0d7805bf49e9ae1d3880c9b15af4",
|
||||
"client_secret": "2bd7aebb3d5a4b7c96d4352659a5b045"
|
||||
}
|
||||
139
week6/twitter-search-geo/index.html
Normal file
139
week6/twitter-search-geo/index.html
Normal file
@ -0,0 +1,139 @@
|
||||
<html>
|
||||
<head>
|
||||
<title>SEARCH TWITTER</title>
|
||||
<style>
|
||||
/* CSS Styling */
|
||||
#frame {
|
||||
width: 100%;
|
||||
}
|
||||
#inputs{
|
||||
width: 50em;
|
||||
bborder: 1px solid black;
|
||||
}
|
||||
#map {
|
||||
height: 500px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
</style>
|
||||
<!-- SCRIPTS -->
|
||||
<!-- import jquery -->
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<!-- HTML -->
|
||||
<label>SEARCH TWITTER</label>
|
||||
<div id="frame">
|
||||
<!-- inputs for the search to send to server -->
|
||||
<div id="inputs">
|
||||
<label>keyword: </label>
|
||||
<input id="text_field" type="text"/>
|
||||
<label>results </label>
|
||||
<input id="nbr_results" type="number" value="20" min="1" max="50">
|
||||
<input id="search_button" type="button" value="Search" onclick="search();">
|
||||
</div>
|
||||
|
||||
<div id="map"></div>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- SCRIPTS -->
|
||||
<!-- import socket.io -->
|
||||
<script src="/socket.io/socket.io.js"></script>
|
||||
<script>
|
||||
// connect to localhost on its port (see server.js -- 8088)
|
||||
var socket = io().connect('http://localhost:8088');
|
||||
|
||||
// the map object -- (which needs to be initialised -- see init_map())
|
||||
var map = null;
|
||||
|
||||
// all maps markers
|
||||
var markers = [];
|
||||
|
||||
// when connecting
|
||||
socket.on('connect', function (data) {
|
||||
console.log('connected');
|
||||
});
|
||||
|
||||
// when receiving a custom message form the server ('search_twitter_results')
|
||||
socket.on('search_twitter_results', function(msg) {
|
||||
//console.log('search_twitter_results: ' + JSON.stringify(msg));
|
||||
geolocate_results_and_dispay(msg, map);
|
||||
});
|
||||
|
||||
// when search button is pressed
|
||||
function search() {
|
||||
|
||||
var keyword = document.getElementById("text_field").value;
|
||||
var hits = document.getElementById("nbr_results").value;
|
||||
// create search parameters that will be sent to the server
|
||||
var search_params = {keyword_value: keyword, nbr_hits: hits};
|
||||
|
||||
// send request to the server
|
||||
socket.emit('search_twitter', search_params);
|
||||
|
||||
}
|
||||
|
||||
function init_map() {
|
||||
map = new google.maps.Map(document.getElementById('map'), {
|
||||
zoom: 5,
|
||||
center: {lat: 52.373629, lng: 4.887848} // Amsterdam
|
||||
});
|
||||
}
|
||||
|
||||
function add_marker_information(marker) {
|
||||
|
||||
markers.push(marker);
|
||||
|
||||
google.maps.event.addListener(marker, 'click', (function(marker) {
|
||||
|
||||
return function(evt) {
|
||||
|
||||
var content = marker.getTitle();
|
||||
var info = google.maps.InfoWindow();
|
||||
info.setContent(content);
|
||||
info.open(a_map, marker);
|
||||
|
||||
}
|
||||
|
||||
})(marker));
|
||||
|
||||
|
||||
}
|
||||
|
||||
function geolocate_results_and_dispay(results, a_map) {
|
||||
|
||||
var geocoder = new google.maps.Geocoder();
|
||||
|
||||
for(r of results) {
|
||||
|
||||
//console.log(r.location);
|
||||
|
||||
geocoder.geocode({'address': r.location}, function(geo_results, status) {
|
||||
|
||||
if(status === 'OK') {
|
||||
|
||||
var marker = new google.maps.Marker({
|
||||
map: a_map,
|
||||
position: geo_results[0].geometry.location,
|
||||
title: r.tweet_text
|
||||
});
|
||||
|
||||
add_marker_information(marker); // does not work...
|
||||
|
||||
} else {
|
||||
console.log('No geocode for ' + r.location);
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
<script async defer src="https://maps.googleapis.com/maps/api/js?key=AIzaSyCi7-OtKvhvY5W8GGrbY8yUIq4JU3vHGPw&callback=init_map">
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
16
week6/twitter-search-geo/package.json
Normal file
16
week6/twitter-search-geo/package.json
Normal file
@ -0,0 +1,16 @@
|
||||
{
|
||||
"name": "search-twitter",
|
||||
"version": "1.0.0",
|
||||
"description": "simple twitter search",
|
||||
"main": "server.js",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"author": "gauthier",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"express": "^4.14.0",
|
||||
"socket.io": "^1.6.0",
|
||||
"twitter": "^1.4.0"
|
||||
}
|
||||
}
|
||||
110
week6/twitter-search-geo/server.js
Normal file
110
week6/twitter-search-geo/server.js
Normal file
@ -0,0 +1,110 @@
|
||||
// server.js
|
||||
|
||||
// import express ()
|
||||
var express = require('express'); // npm install --save express
|
||||
var app = express();
|
||||
|
||||
// import node.js http
|
||||
var server = require('http').Server(app);
|
||||
|
||||
// import socket.io
|
||||
var io = require('socket.io')(server); // npm install --save socket.io
|
||||
|
||||
// import filesystem (aka fs)
|
||||
var fs = require('fs');
|
||||
|
||||
//import twitter
|
||||
var twitter = require('twitter'); // npm install --save twitter
|
||||
|
||||
|
||||
/* ----------------------
|
||||
Twitter Configuration
|
||||
-------------------------*/
|
||||
|
||||
// load configuration file with all secrets, etc.
|
||||
var config_file = "./twitter_credentials.json";
|
||||
var config = JSON.parse(fs.readFileSync(config_file, "utf8"));
|
||||
|
||||
// create the twitter client
|
||||
var client = new twitter(config);
|
||||
|
||||
/*------------------------
|
||||
TWITTER FUNCTIONS
|
||||
--------------------------*/
|
||||
|
||||
function search_twitter(keyword_value, nbr_hits) {
|
||||
|
||||
|
||||
//var twitter_search_params = {q: keyword_value, geocode: "37.781157,-122.398720,100mi"}; // <-- this is centered around a given region
|
||||
var twitter_search_params = {q: keyword_value, count: nbr_hits};
|
||||
|
||||
client.get('search/tweets', twitter_search_params, function(error, tweets, response) {
|
||||
|
||||
var results = [];
|
||||
|
||||
//console.log(tweets);
|
||||
|
||||
if(!error) {
|
||||
for(tweet of tweets.statuses) {
|
||||
|
||||
if(tweet.user.location != null && tweet.user.location.trim().length > 0) {
|
||||
|
||||
//console.log('-->' + tweet.user.location + '<--');
|
||||
|
||||
results.push({tweet_text: tweet.text, location: tweet.user.location});
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
} else {
|
||||
console.log('* ERROR *: ' + error);
|
||||
}
|
||||
|
||||
// send results to client
|
||||
io.emit('search_twitter_results', results);
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
/* ----------------------------------
|
||||
Server and Socket Configuration
|
||||
--------------------------------------*/
|
||||
|
||||
// tell express to server our index.html file
|
||||
app.get('/', function (req, res) {
|
||||
res.sendFile(__dirname + '/index.html');
|
||||
});
|
||||
|
||||
// configure socket.io
|
||||
// (1) when there is a connection
|
||||
io.on('connection', function(socket) {
|
||||
|
||||
console.log('got a connection');
|
||||
|
||||
// (2) configure the connected socket to receive custom messages ('message from human')
|
||||
socket.on('search_twitter', function(msg) {
|
||||
|
||||
console.log('searching twitter with: ' + msg.toString());
|
||||
|
||||
search_twitter(msg.keyword_value, msg.nbr_hits);
|
||||
|
||||
});
|
||||
|
||||
socket.on('disconnet', function() {
|
||||
|
||||
console.log('got a disconnection');
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
/* -------------------
|
||||
Start the server
|
||||
----------------------*/
|
||||
|
||||
// listen to connection on port 8088 --> http://localhost:8088
|
||||
server.listen(8088, function () {
|
||||
console.log('listening on port: ' + 8088);
|
||||
});
|
||||
|
||||
6
week6/twitter-search-geo/twitter_credentials.json
Normal file
6
week6/twitter-search-geo/twitter_credentials.json
Normal file
@ -0,0 +1,6 @@
|
||||
{
|
||||
"consumer_key": "jKMz31iuQMImQpDZOEKlFelb2",
|
||||
"consumer_secret": "IAfen9GcPSKsmiFZcXv23qVLDdI6PhHAFfJidc8UWbg8qIJnmH",
|
||||
"access_token_key": "801125183360745472-eMpgT1Cscw86Mm31KG8DTq336L5g4RB",
|
||||
"access_token_secret": "xZEuPLawdBwOgPCSWHaWsUAgbYlobAztYmwMMGeJvtsli"
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user