Advertisement
Guest User

Untitled

a guest
Jun 30th, 2016
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*eslint-env node*/
  2.  
  3. //------------------------------------------------------------------------------
  4. // node.js starter application for Bluemix
  5. //------------------------------------------------------------------------------
  6.  
  7. // This application uses express as its web server
  8. var express = require('express'),
  9.     bodyParser = require('body-parser'),
  10.     urlencodedParser = bodyParser.urlencoded({ extended: false }),
  11.     extend  = require('util')._extend,
  12.   fs = require('fs'),
  13.   request = require('request'),
  14.     watson = require('watson-developer-cloud');
  15.  
  16. // credentials
  17. var credentials_lang = extend({
  18.    username: '246412c0-f39a-424c-a61e-4054cc589fef',
  19.    password: 'lAna28GByO4x',
  20.    version: 'v2'
  21. });
  22. //}, bluemix.getServiceCreds('language-translation')); // VCAP_SERVICES
  23.  
  24. var credentials_pers = extend({
  25.    username: '2cc8d6f4-7389-4152-bd39-ea275f5c35d1',
  26.    password: 'MLa2NOoxqj3M',
  27.    version: 'v2'
  28. });
  29. //}, bluemix.getServiceCreds('personality_insights')); // VCAP_SERVICES
  30.  
  31. var visual_recognition = watson.visual_recognition({
  32.   api_key: '3a979cdebdf9fa964a3df0c7ae4bebc78d8e50d7',
  33.   version_date: '2016-05-20',
  34.   version: 'v3'
  35. });
  36.  
  37. var tone_analyzer = watson.tone_analyzer({
  38.   username: '2e5702e8-b833-4444-b43d-25fffbd910ac',
  39.   password: 'k18xypHwnilk',
  40.   version: 'v3',
  41.   version_date: '2016-05-19'
  42. });
  43.  
  44.  
  45. var personality_insights = watson.personality_insights(credentials_pers);
  46. var language_translation = watson.language_translation(credentials_lang);
  47.  
  48. // cfenv provides access to your Cloud Foundry environment
  49. var cfenv = require('cfenv');
  50. // get the app environment from Cloud Foundry
  51. var appEnv = cfenv.getAppEnv();
  52. // create a new express server
  53. var app = express();
  54.  
  55. app.use(express.static(__dirname + '/public'));
  56.  
  57. // adding the template "pug" (formerly jade)
  58. app.set('view engine', 'pug');
  59.  
  60. //------------------------------------------------------------------------------
  61. // routes
  62. //------------------------------------------------------------------------------
  63.  
  64. var params = null;
  65.  
  66. app.get('/', function(req, res){
  67.   res.render('index.pug');
  68. })
  69.  
  70. .get('/api/translate', function(req, res){
  71.   res.render('translate.pug');
  72. })
  73.  
  74. .get('/api/personality', function(req, res){
  75.   res.render('personality.pug');
  76. })
  77.  
  78. .get('/api/visual', function(req, res){
  79.   res.render('visual.pug');
  80. })
  81.  
  82. .get('/api/search', function(req, res){
  83.   res.render('twitter.pug');
  84. })
  85.  
  86. // Language Translation
  87. .post('/api/translate', urlencodedParser, function(req, res) {
  88.   if (req.body.message != '') {
  89.     params = {
  90.       text: req.body.message,
  91.       source: 'fr',
  92.       target: 'en'
  93.     };
  94.     language_translation.translate(params, function (err, translatedMessage) {
  95.       res.render('translate.pug', { 'translation': translatedMessage.translations[0].translation });
  96.     });
  97.   }
  98. })
  99.  
  100. // Personality Insights
  101. .post('/api/personality', urlencodedParser, function(req, res) {
  102.   if (req.body.message != '') {
  103.     params = { text: req.body.message };
  104.     personality_insights.profile(params, function(err, personality) {
  105.       res.render('personality.pug', { 'personality': JSON.stringify(personality, null, 2 ) });
  106.     });
  107.   }
  108. })
  109.  
  110. // Visual Recognition
  111. .post('/api/visual', urlencodedParser, function(req, res) {
  112.   if (req.body.url) { // image externe
  113.     params = {
  114.       url: req.body.url,
  115.       classifier_ids: 'default,chateau_bouges_855464739'
  116.     };
  117.   }
  118.  
  119.   if (req.body.sample == 'true') { // image sample
  120.     params = {
  121.       images_file: fs.createReadStream(__dirname + '/public' + req.body.sample_radio),
  122.       classifier_ids: 'default,chateau_bouges_855464739'
  123.     };
  124.   }
  125.  
  126.   visual_recognition.classify(params , function(err, visual) {
  127.     res.render('visual.pug', { 'visual': JSON.stringify(visual, null, 2 ) });
  128.   });
  129. })
  130.  
  131. // Insights for Twitter
  132.  
  133. .post('/api/search', urlencodedParser, function(req, res) {
  134.   var query = '';
  135.   var number = '5'; // nombre de tweets par défaut (100 initialement)
  136.   var lang = '';
  137.   var startTime = '';
  138.   var author = '';
  139.  
  140.   if (req.body.query) { query = encodeURIComponent(req.body.query); } // Autorise l'utilisateur à indiquer un #hashtag
  141.   if (req.body.number) {number = req.body.number; }
  142.  
  143.   // Paramètres de la query
  144.   if (req.body.language) { lang = '+lang:' + req.body.language; }
  145.   if (req.body.startTime) { startTime = '+posted:' + req.body.startTime; }
  146.   if (req.body.author) {author = '+from:' + req.body.author; }
  147.  
  148.   // Construction de la query
  149.   query = query + lang + startTime + author;
  150.  
  151.   var host = 'https://476d07a7-cc7d-4b61-b009-28178ca8bca2:mgAGIPtQou@cdeservice.mybluemix.net';
  152.   var path = '/api/v1/messages/search';
  153.   var url = host + path + '?q=' + query + '&size=' + number;
  154.  
  155.   // hijacked
  156.   url = 'https://476d07a7-cc7d-4b61-b009-28178ca8bca2:mgAGIPtQou@cdeservice.mybluemix.net/api/v1/messages/search?q=(VillaCavrois OR "Villa Cavrois")+posted:2016-01-01+lang:fr&size=10';
  157.   //    '(lang:fr%20OR%20lang:en) lang:fr lang:en
  158.  
  159.   request.get(url, function(error, response, file) {
  160.     if(error) {
  161.       response.send(error).status(400);
  162.     }
  163.     else {
  164.       var json = JSON.parse(file);
  165.       var messages = []; // liste de tweets
  166.       var sentences = []; // liste de tweets nettoyés de ponctuation de fin de phrase
  167.       var authors = []; // liste des auteurs des tweets
  168.       var big_sentence = ''; // string contenant tous les tweets
  169.       var positive; // JSON Tone Analyzer
  170.  
  171.  
  172.       if (json.tweets) {
  173.         json.tweets.forEach(function(item, index) {
  174.           messages.push(item.message.body);
  175.           var sentence = item.message.body.replace(/\.|\!|\?/g,'') + '. '; // Transforme chaque tweet en une phrase pour Tone Analyzer
  176.           big_sentence += sentence;
  177.           sentences.push(sentence);
  178.           authors.push(item.message.actor.preferredUsername);
  179.  
  180.           // Traduit le texte en anglais si nécessaire
  181.           if (req.body.language == 'fr')
  182.           {
  183.             language_translation.translate({
  184.               text: big_sentence,
  185.               source: 'fr',
  186.               target: 'en'
  187.             }, function(err, englishText) {
  188.               if (err)
  189.                 console.log(err)
  190.               else {
  191.                 big_sentence = englishText.translations[0].translation;
  192.                 tone_analyzer.tone( {
  193.                   text: big_sentence,
  194.                   tones: 'emotion'
  195.                 },
  196.                   function(err, tone) {
  197.                     if (err) {
  198.                       console.log(err);
  199.                     }
  200.                     else {
  201.                       positive = JSON.stringify(tone, null, 2 );
  202.                       res.render('twitter.pug', { 'search': file, 'search2': json, 'tweets': messages, 'sentences':sentences, 'authors': authors, 'positive': positive });
  203.                     }
  204.                   });
  205.               }
  206.             });
  207.           }
  208.         });
  209.         //res.render('twitter.pug', { 'search': file, 'search2': json, 'tweets': messages, 'sentences':sentences, 'authors': authors, 'positive': positive });
  210.       }
  211.       else {
  212.         res.render('twitter.pug', { 'search': file});
  213.       }
  214.     }
  215.   });  
  216. });
  217.  
  218.    
  219.  
  220.  
  221.  
  222.  
  223. // start server on the specified port and binding host
  224. app.listen(appEnv.port, '0.0.0.0', function() {
  225.   // print a message when the server starts listening
  226.   console.log("server starting on " + appEnv.url);
  227. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement