| 
				
			 | 
			
			
				@@ -0,0 +1,65 @@ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1
			 | 
			
			
				+## Searchcode (It) 
			 | 
		
	
		
			
			| 
				
			 | 
			
				2
			 | 
			
			
				+# 
			 | 
		
	
		
			
			| 
				
			 | 
			
				3
			 | 
			
			
				+# @website     https://searchcode.com/ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				4
			 | 
			
			
				+# @provide-api yes (https://searchcode.com/api/) 
			 | 
		
	
		
			
			| 
				
			 | 
			
				5
			 | 
			
			
				+# 
			 | 
		
	
		
			
			| 
				
			 | 
			
				6
			 | 
			
			
				+# @using-api   yes 
			 | 
		
	
		
			
			| 
				
			 | 
			
				7
			 | 
			
			
				+# @results     JSON 
			 | 
		
	
		
			
			| 
				
			 | 
			
				8
			 | 
			
			
				+# @stable      yes 
			 | 
		
	
		
			
			| 
				
			 | 
			
				9
			 | 
			
			
				+# @parse       url, title, content 
			 | 
		
	
		
			
			| 
				
			 | 
			
				10
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				11
			 | 
			
			
				+from urllib import urlencode 
			 | 
		
	
		
			
			| 
				
			 | 
			
				12
			 | 
			
			
				+from json import loads 
			 | 
		
	
		
			
			| 
				
			 | 
			
				13
			 | 
			
			
				+import cgi 
			 | 
		
	
		
			
			| 
				
			 | 
			
				14
			 | 
			
			
				+import re 
			 | 
		
	
		
			
			| 
				
			 | 
			
				15
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				16
			 | 
			
			
				+# engine dependent config 
			 | 
		
	
		
			
			| 
				
			 | 
			
				17
			 | 
			
			
				+categories = ['it'] 
			 | 
		
	
		
			
			| 
				
			 | 
			
				18
			 | 
			
			
				+paging = True 
			 | 
		
	
		
			
			| 
				
			 | 
			
				19
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				20
			 | 
			
			
				+# search-url 
			 | 
		
	
		
			
			| 
				
			 | 
			
				21
			 | 
			
			
				+url = 'https://searchcode.com/' 
			 | 
		
	
		
			
			| 
				
			 | 
			
				22
			 | 
			
			
				+search_url = url+'api/codesearch_I/?{query}&p={pageno}' 
			 | 
		
	
		
			
			| 
				
			 | 
			
				23
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				24
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				25
			 | 
			
			
				+# do search-request 
			 | 
		
	
		
			
			| 
				
			 | 
			
				26
			 | 
			
			
				+def request(query, params): 
			 | 
		
	
		
			
			| 
				
			 | 
			
				27
			 | 
			
			
				+    params['url'] = search_url.format(query=urlencode({'q': query}), 
			 | 
		
	
		
			
			| 
				
			 | 
			
				28
			 | 
			
			
				+                                      pageno=params['pageno']-1) 
			 | 
		
	
		
			
			| 
				
			 | 
			
				29
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				30
			 | 
			
			
				+    return params 
			 | 
		
	
		
			
			| 
				
			 | 
			
				31
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				32
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				33
			 | 
			
			
				+# get response from search-request 
			 | 
		
	
		
			
			| 
				
			 | 
			
				34
			 | 
			
			
				+def response(resp): 
			 | 
		
	
		
			
			| 
				
			 | 
			
				35
			 | 
			
			
				+    results = [] 
			 | 
		
	
		
			
			| 
				
			 | 
			
				36
			 | 
			
			
				+     
			 | 
		
	
		
			
			| 
				
			 | 
			
				37
			 | 
			
			
				+    search_results = loads(resp.text) 
			 | 
		
	
		
			
			| 
				
			 | 
			
				38
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				39
			 | 
			
			
				+    # parse results 
			 | 
		
	
		
			
			| 
				
			 | 
			
				40
			 | 
			
			
				+    for result in search_results['results']: 
			 | 
		
	
		
			
			| 
				
			 | 
			
				41
			 | 
			
			
				+        href = result['url'] 
			 | 
		
	
		
			
			| 
				
			 | 
			
				42
			 | 
			
			
				+        title = "" + result['name'] + " - " + result['filename'] 
			 | 
		
	
		
			
			| 
				
			 | 
			
				43
			 | 
			
			
				+        content = result['repo'] + "<br />" 
			 | 
		
	
		
			
			| 
				
			 | 
			
				44
			 | 
			
			
				+         
			 | 
		
	
		
			
			| 
				
			 | 
			
				45
			 | 
			
			
				+        lines = dict() 
			 | 
		
	
		
			
			| 
				
			 | 
			
				46
			 | 
			
			
				+        for line, code in result['lines'].items(): 
			 | 
		
	
		
			
			| 
				
			 | 
			
				47
			 | 
			
			
				+            lines[int(line)] = code 
			 | 
		
	
		
			
			| 
				
			 | 
			
				48
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				49
			 | 
			
			
				+        content = content + '<pre class="code-formatter"><table class="code">' 
			 | 
		
	
		
			
			| 
				
			 | 
			
				50
			 | 
			
			
				+        for line, code in sorted(lines.items()): 
			 | 
		
	
		
			
			| 
				
			 | 
			
				51
			 | 
			
			
				+            content = content + '<tr><td class="line-number" style="padding-right:5px;">'  
			 | 
		
	
		
			
			| 
				
			 | 
			
				52
			 | 
			
			
				+            content = content + str(line) + '</td><td class="code-snippet">'  
			 | 
		
	
		
			
			| 
				
			 | 
			
				53
			 | 
			
			
				+            # Replace every two spaces with ' &nbps;' to keep formatting while allowing the browser to break the line if necessary 
			 | 
		
	
		
			
			| 
				
			 | 
			
				54
			 | 
			
			
				+            content = content + cgi.escape(code).replace('\t', '    ').replace('  ', '  ').replace('  ', '  ')  
			 | 
		
	
		
			
			| 
				
			 | 
			
				55
			 | 
			
			
				+            content = content + "</td></tr>" 
			 | 
		
	
		
			
			| 
				
			 | 
			
				56
			 | 
			
			
				+             
			 | 
		
	
		
			
			| 
				
			 | 
			
				57
			 | 
			
			
				+        content = content + "</table></pre>" 
			 | 
		
	
		
			
			| 
				
			 | 
			
				58
			 | 
			
			
				+         
			 | 
		
	
		
			
			| 
				
			 | 
			
				59
			 | 
			
			
				+        # append result 
			 | 
		
	
		
			
			| 
				
			 | 
			
				60
			 | 
			
			
				+        results.append({'url': href, 
			 | 
		
	
		
			
			| 
				
			 | 
			
				61
			 | 
			
			
				+                        'title': title, 
			 | 
		
	
		
			
			| 
				
			 | 
			
				62
			 | 
			
			
				+                        'content': content}) 
			 | 
		
	
		
			
			| 
				
			 | 
			
				63
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				64
			 | 
			
			
				+    # return results 
			 | 
		
	
		
			
			| 
				
			 | 
			
				65
			 | 
			
			
				+    return results 
			 |