Saturday 19 August 2017

CommandLineFu with Python ~ programming info

Overview

One of the best methods to practice Python coding is to study some code and try
them out yourself.

By doing a lot of code exercises, you will get a much better understanding of what
it really does. 

In other words, learning by doing. 

To help you improve your Python coding skill, I've created a program below which
is using the API from CommandLineFu.com

CommandLineFu API

A common first step when you want to use a Web-based services is to see if they
have an API. 

Luckily for me, Commandlinefu.com provides one and can be found here

"
The content of commandlinefu.com is available in a variety of different formats
for you to do what you like with. 

Any page which contains a list of commands (such as the listings by tag, function
or user) can be returned in a format of your choice through a simple change to the
request URL."
The example URL that they provide is:
http://www.commandlinefu.com/commands/'command-set'/'format'/

where:

command-set
is the URL component which specifies which set of commands to return.

Possible values are:
browse/sort-by-votes
tagged/163/grep
matching/ssh/c3No

format
is one of the following: plaintext, json and rss.

I prefer using the json format and that is also what I'm using in the program
below.

Creating the "Command Line Search Tool"

I think we have all the API information we need, so let's get to it.

The program is well documented and should be straightforward. 

Open up a text editor, copy & paste the code below. 

Save the file as: "commandlinefu.py" and exit the editor.
#!/usr/bin/env python27
import urllib2
import base64
import json
import os
import sys
import re

os.system("clear")
print "-" * 80
print "Command Line Search Tool"
print "-" * 80

def Banner(text):
    print "=" * 70
    print text
    print "=" * 70
    sys.stdout.flush()

def sortByVotes():
    Banner('Sort By Votes')
    url = "http://www.commandlinefu.com/commands/browse/sort-by-votes/json"
    request = urllib2.Request(url)
    response = json.load(urllib2.urlopen(request))
    #print json.dumps(response,indent=2)
    for c in response:
        print "-" * 60
        print c['command']

def sortByVotesToday():
    Banner('Printing All commands the last day (Sort By Votes) ')
    url = "http://www.commandlinefu.com/commands/browse/last-day/sort-by-votes/json"
    request = urllib2.Request(url)
    response = json.load(urllib2.urlopen(request))
    for c in response:
        print "-" * 60
        print c['command']

def sortByVotesWeek():
    Banner('Printing All commands the last week (Sort By Votes) ')
    url = "http://www.commandlinefu.com/commands/browse/last-week/sort-by-votes/json"
    request = urllib2.Request(url)
    response = json.load(urllib2.urlopen(request))
    for c in response:
        print "-" * 60
        print c['command']

def sortByVotesMonth():
    Banner('Printing: All commands from the last months (Sorted By Votes) ')
    url = "http://www.commandlinefu.com/commands/browse/last-month/sort-by-votes/json"
    request = urllib2.Request(url)
    response = json.load(urllib2.urlopen(request))
    for c in response:
        print "-" * 60
        print c['command']

def sortByMatch():
    #import base64
    Banner("Sort By Match")
    match = raw_input("Please enter a search command: ")
    bestmatch = re.compile(r' ')
    search = bestmatch.sub('+', match)
    b64_encoded = base64.b64encode(search)
    url = "http://www.commandlinefu.com/commands/matching/" + search + "/" + b64_encoded + "/json"
    request = urllib2.Request(url)
    response = json.load(urllib2.urlopen(request))
    for c in response:
        print "-" * 60
  print c['command']

print """
1. Sort By Votes (All time)
2. Sort By Votes (Today)
3. Sort by Votes (Week)
4. Sort by Votes (Month)
5. Search for a command
 
Press enter to quit
"""

while True:
  answer = raw_input("What would you like to do? ")

 if answer == "":
    sys.exit()
  
  elif answer == "1":
   sortByVotes()
 
  elif answer == "2":
   print sortByVotesToday()
  
  elif answer == "3":
   print sortByVotesWeek()
 
  elif answer == "4":
   print sortByVotesMonth()
  
  elif answer == "5":
   print sortByMatch()
 
  else:
   print "Not a valid choice"
When you run the program, you will be presented with a menu in which you can make
your choices.

--------------------------------------------------------------------------------
Command Line Search Tool
--------------------------------------------------------------------------------

1. Sort By Votes (All time)
2. Sort By Votes (Today)
3. Sort by Votes (Week)
4. Sort by Votes (Month)
5. Search for a command

Press enter to quit

No comments:

Post a Comment