associação pythonbrasil[11] django zope/plone planet Início Logado como (Entrar)

Diferenças para "RankingLinguagens"

Diferenças entre as versões de 11 e 12
Revisão 11e 2009-03-21 06:12:56
Tamanho: 5888
Editor: JSBueno
Comentário:
Revisão 12e 2009-03-21 13:54:31
Tamanho: 5893
Editor: AdrianoOgata
Comentário:
Deleções são marcadas assim. Adições são marcadas assim.
Linha 69: Linha 69:
De forma correlata, ontem me bateu vontad ed e ver quantos hits tinhamos pra diferentes linguagens nos search engines, mas combinando o nome da linguagemc om um domínio da computação - por exemplo "scientific computing", "mail server", "web application" e assim por diante.
Coecei fazndo um buscadorzinho usando o html do google (eles tem uma API REST que seria masi apropriada.) Lá pelo meio do caminho, o Google resolveu que eu era um bot saqueando seus rankings e começou a colocar captchas pro meu script. Eu mudei pro Yahoo Mas o código está brut aqui - rápido e sujo - as funções para o google estão inclusas, é só mudar as atribuições dentro do código. Com o eu tenho uma dimensão a mais pra busca, preferi dara saída num arquivo CSV, que eu importo num software de planilha e fico vendo gráficos bonitos.
Só não conseugi dados significativos ainda -- rodem uma vez e vocês vão perceber. Tem-se que ajustar os domínios, talvez refianr um pouco mais as buscas com um outro arâmetro - para se ter algo mais interessante.
Bom fica ai pra quem quiser brincar
De forma correlata, ontem me bateu vontade de ver quantos hits tínhamos pra diferentes linguagens nos search engines, mas combinando o nome da linguagem com um domínio da computação - por exemplo "scientific computing", "mail server", "web application" e assim por diante.
Comecei fazendo um buscadorzinho usando o html do google (eles tem uma API REST que seria mais apropriada.) Lá pelo meio do caminho, o Google resolveu que eu era um bot saqueando seus rankings e começou a colocar captchas pro meu script. Eu mudei pro Yahoo mas o código está bruto aqui - rápido e sujo - as funções para o google estão inclusas, é só mudar as atribuições dentro do código. Como eu tenho uma dimensão a mais pra busca, preferi dar a saída num arquivo CSV, que eu importo num software de planilha e fico vendo gráficos bonitos.
Só não consegui dados significativos ainda -- rodem uma vez e vocês vão perceber. Tem que se ajustar os domínios, talvez refinar um pouco mais as buscas com um outro parâmetro - para se ter algo mais interessante.
Bom fica aí pra quem quiser brincar

Receita: Ranking de Linguagens do SourceForge

Script útil para mostrar aos incrédulos que Python é uma linguagem bastante usada no desenvolvimento de software livre. O site SourceForge.net publica uma relação com linguagens de programação e número de projetos hospedados com cada linguagem. Na página do SF, a listagem é alfabética por linguagem. Este script busca a relação e gera uma listagem ordenada por número de projetos, em ordem decrescente.

Código

# -*- coding: iso-8859-1 -*- 

'''
A função buscar() acessa a página do SourceForge.net que relaciona
o número de projetos por linguagem de programação, e retorna uma 
lista de tuplas (numero_de_projetos, linguagem), ordenada por 
numero_de_projetos decrescente.

Quando acionado como programa principal, este módulo emite a 
listagem em stdout, com campos delimitados por tab.
'''

import re
from urllib import urlopen

URL_FONTE = 'http://sourceforge.net/softwaremap/trove_list.php?form_cat=160'

TABELA = r'''<b>Programming Language</b><br>(.*?)</td>'''

#               &nbsp; Ada</a> <i>(72 projects)</i>
LINGUAGEM = r'''&nbsp; ([^<]+)</a>\s*<i>\((\d+) projects\)</i>'''
                
re_tabela = re.compile(TABELA, re.IGNORECASE|re.DOTALL)
re_linguagem = re.compile(LINGUAGEM, re.IGNORECASE|re.DOTALL)

def buscar():
    # teste local: html = open('trove_list.php.html').read()
    html = urlopen(URL_FONTE).read()
    miolo = re.search(re_tabela,html).group(1)
    achados = re.findall(re_linguagem, miolo)
    lista = [(int(projs), ling) for (ling, projs) in achados]
    lista.sort()
    lista.reverse()
    return lista
    
def main():    
    lista = ['%5d\t%s' % item for item in buscar()]
    print '\n'.join(lista)
    
if __name__=='__main__':
    main()

O arquivo resultante fica assim:

12279   C
12112   C++
10519   Java
 7963   PHP
 5108   Perl
 2820   Python
 1661   Visual Basic
 1502   JavaScript
 1324   Delphi/Kylix
 1287   Unix Shell
[...]

Volta para CookBook.


LucianoRamalho


Receita: Ranking de Linguagens do Google/Yahoo

De forma correlata, ontem me bateu vontade de ver quantos hits tínhamos pra diferentes linguagens nos search engines, mas combinando o nome da linguagem com um domínio da computação - por exemplo "scientific computing", "mail server", "web application" e assim por diante. Comecei fazendo um buscadorzinho usando o html do google (eles tem uma API REST que seria mais apropriada.) Lá pelo meio do caminho, o Google resolveu que eu era um bot saqueando seus rankings e começou a colocar captchas pro meu script. Eu mudei pro Yahoo mas o código está bruto aqui - rápido e sujo - as funções para o google estão inclusas, é só mudar as atribuições dentro do código. Como eu tenho uma dimensão a mais pra busca, preferi dar a saída num arquivo CSV, que eu importo num software de planilha e fico vendo gráficos bonitos. Só não consegui dados significativos ainda -- rodem uma vez e vocês vão perceber. Tem que se ajustar os domínios, talvez refinar um pouco mais as buscas com um outro parâmetro - para se ter algo mais interessante. Bom fica aí pra quem quiser brincar

# !/usr/bin/env python
# coding: utf-8

import urllib
import csv
import cookielib, urllib2

cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
opener.addheaders = [('User-agent', 'Mozilla/5.0')]
urllib2.install_opener(opener)
#r = opener.open("http://example.com/")

GOOGLE_SEARCH_URL = """http://www.google.com/search?hl=en&safe=off&num=10&q=%s&btnG=Search"""
YAHOO_SEARCH_URL = """http://search.yahoo.com/search?p=%s&y=Search"""
csvfile = "language_domains.csv"

SEARCH_URL = YAHOO_SEARCH_URL

def get_result(language, domain):
    language = language.replace("+", "%2B")
    language = language.replace("#", "%23")
    if " " in language:
        language = "%%22%s%%22" % language
    if " " in domain:
        domain = "%%22%s%%22" % domain
    query_string = "%s++%s" % (domain.replace(" ", "+"), language.replace(" ", "+"),)
    url = SEARCH_URL % query_string
    print url
    html = urllib2.urlopen(url).read()
    return html

def count_matches_google(html):
    index = html.find("swrnum=")
    if index == -1:
        return 0
    part = html[index + len("swrnum="):]
    part = part.split('"')[0]
    if part.isdigit():
        return int(part)
    return 0
def count_matches_yahoo(html):
    index = html.find('''id="infotext"''')
    if index == -1:
        return 0
    part = html[index: index + 80]
    part = part.split("of")[1].split("for")[0].strip()
    part = part.replace(",", "")
    if part.isdigit():
        return int(part)
    return 0
count_matches = count_matches_yahoo

languages = ("java", "c++", "python","javascript", "ruby", "php", "perl", "shell", "fortran", "cobol", "ansi c", "visual basic", "c#", "lua", "jython")

domains = ("scientific computing", "web development", "server software", "gui application", "database", "financial",
           "mail server", "security software", "system administration", "enterprise software")
           
def main():
    file = open(csvfile, "wt")
    writer = csv.writer(file)
    writer.writerow(("",) + languages +("NORMALIZED",) + languages)
    for domain in domains:
        results = []
        for language in languages:
            count = count_matches(get_result(language, domain))
            print ("%s-  %s: %s" % (domain, language, count))
            results.append(count)
        m = float(max(results))
        normalized_results = [result / m for result in results]
        writer.writerow([domain] + results + [""] + normalized_results)
    file.close()
main()

Volta para CookBook


JoaoBueno