/lib/DDG/Spice/AlternativeTo.pm

https://github.com/pardocz/zeroclickinfo-spice · Perl · 52 lines · 42 code · 10 blank · 0 comment · 6 complexity · f0bf4b429c523e9d3f682f01706f01dc MD5 · raw file

  1. package DDG::Spice::AlternativeTo;
  2. use DDG::Spice;
  3. primary_example_queries "alternative to notepad";
  4. secondary_example_queries "alternative to photoshop for mac", "free alternative to spotify for windows";
  5. description "Find software alternatives";
  6. name "AlternativeTo";
  7. icon_url "/i/alternativeto.net.ico";
  8. source "AlternativeTo";
  9. code_url "https://github.com/duckduckgo/zeroclickinfo-spice/blob/master/lib/DDG/Spice/AlternativeTo.pm";
  10. topics "everyday", "programming";
  11. category "computing_tools";
  12. attribution github => ['https://github.com/Getty','Torsten Raudssus'],
  13. twitter => ['https://twitter.com/raudssus','raudssus'];
  14. triggers start => "free","opensource","commercial";
  15. triggers any => "alternative","alternatives","alternativeto";
  16. spice from => '([^/]+)/(.*?)/([^/]*)';
  17. spice to => 'http://api.alternativeto.net/software/$1/?platform=$2&license=$3&count=12&callback={{callback}}&key={{ENV{DDG_SPICE_ALTERNATIVETO_APIKEY}}}';
  18. my %alternatives = (
  19. 'google' => 'googlecom',
  20. 'photoshop' => 'adobe-photoshop',
  21. 'yahoo' => 'yahoo-search',
  22. 'bing' => 'bingcom',
  23. 'mac-os-x' => 'mac-os'
  24. );
  25. handle query_lc => sub {
  26. if (/^(?:(free|open\ssource|commercial))?\s*(?:alternative(?:s|)?\s*?(?:to|for)\s*?)(\b(?!for\b).*?\b)(?:\s*?for\s(.*))?$/) {
  27. my $license = $1 || "";
  28. my $prog = $2 || "";
  29. my $platform = $3 || "";
  30. $license =~ s/\s+//;
  31. $prog =~ s/\s+$//g;
  32. $prog =~ s/^\s+//g;
  33. $prog =~ s/\s+/-/g;
  34. $prog = $alternatives{$prog} if exists $alternatives{$prog};
  35. if($platform) {
  36. return $prog, $platform, $license;
  37. }
  38. return $prog, "all", $license;
  39. }
  40. return;
  41. };
  42. 1;