/plugins/duckduckgo.js

https://github.com/gf3/protobot · JavaScript · 37 lines · 30 code · 6 blank · 1 comment · 9 complexity · 881d29a5a1bcf489ebcc1d67c3b6ae8c MD5 · raw file

  1. exports.register = register
  2. var exec = require( 'child_process' ).exec
  3. /* ---------------------------- DuckDuckGo ---------------------------- */
  4. function DuckDuckGo() {
  5. }
  6. DuckDuckGo.prototype.search = function( query, cloudback ) {
  7. exec("curl 'http://api.duckduckgo.com/?format=json&q=" + escape( query ) + "'", function ( err, stdout, stderr ) {
  8. var results = JSON.parse( stdout ) // What could possibly go wrong?
  9. cloudback.call( this, results )
  10. })
  11. }
  12. function register( j ) {
  13. var ddg = new DuckDuckGo()
  14. j.watch_for( /^([\/.,`?]?)ddg ([^#@]+)(?:\s*#([1-9]))?(?:\s*@\s*([-\[\]\{\}`|_\w]+))?$/, function( message ) {
  15. var user = message.match_data[4] || message.name
  16. , term = message.match_data[2]
  17. , num = +message.match_data[3]-1 || 0
  18. ddg.search( term, function( results ) {
  19. if ( results["AbstractText"] )
  20. message.say( user + ': ' + unescapeAll( results["AbstractText"] ) + ' - ' + results["AbstractURL"] )
  21. else if ( results["Definition"] )
  22. message.say( user + ': ' + results["Definition"] + ' - ' + results["DefinitionURL"] )
  23. else if ( results["Redirect"] ) // !bang syntax used
  24. message.say( user + ': ' + results["Redirect"] )
  25. else if ( results["Results"].length )
  26. message.say( user + ': ' + results["Results"][num]["Text"] + " - " + results["Results"][num]["FirstURL"] )
  27. else
  28. message.say( user + ": Sorry, no results for '" + term + "'" )
  29. })
  30. })
  31. }