BeautifulSoup Basic Crawler Script

This python script prompts a website and crawl for all links (internal and external) inside that page. Then it builds a .CSV file with all URLs.

#!/usr/bin/python

from bs4 import BeautifulSoup

import requests
import csv

url = raw_input("Enter a website to extract the URL's from: ")

r  = requests.get("http://" +url)

data = r.text

soup = BeautifulSoup(data)

with open('eggs.csv', 'wb') as csvfile:
    spamwriter = csv.writer(csvfile, quotechar='|', quoting=csv.QUOTE_MINIMAL)
    for link in soup.find_all('a'):
        print(link.get('href'))
        spamwriter.writerow([link.get('href')])

For each & Associative Arrays

Defining Associative Arrays

var s_list = new Array();
s_list[“tall”] = “Thomas”;
s_list[“cool”] = “Roger”;
s_list[“clever”] = “Amber”;
s_list[“attentive”] = “Jennifer”;

For each

for each(student in s_list) {
document.write(student + “
“);
}

JavaScript Básico

JavaScript

Capturar elementos de uma página utilizando JavaScript

A partir dos elementos DOM da página é possível manipular os elementos do HTML com o JavaScript.

// Get element by id
var myElement = document.getElementById('abc');

// Get all nodes that item elements
//makes an array
var myElement = document.getElementByTag('li');

// Restricting elements to retrieve data
var myListItems = document.getElementsByTagName('li');
var myFirstList = document.getelementById('abc');
var limitedList = myFirstList.getElementsByTagName('li');

Eventos em JavaScript

Qualquer ação do usuário pode ser um evento em JavaScript: um mouseover em determinada imagem, os cliques etc. Por isso, é mais fácil criar os handlers para estes eventos, isto é, as respostas a determinadas ações.

// Event handler
myelement.onclick = function() {
 // 
 // your event handler code
 //
};

// Drawback in JS: IE 8 and previous don't understand
document.addEventListener('click', myFunction, false);

innerHTML

// innerHTML gets text inside tags
innerHTML allows to change text inside text
//JavaScript
document.getElementById('myAnchor').innerHTML

1. create the element
2. add it to the document

//creating elements
var myNewElement = document.createElement("li");
myElement.appendChild(my)

// working with forms
document.forms.frmContact
document.forms.frmContact.name

// applying styles to CSS
#exemple {
width: 230px;
fonte-weight: bold;
}

myElement.style.width = "230px";
myElement.style.fontWeight = "bold"; //camelCase

stting the class:
myElement.className = "";

Return em JavaScript

O return tem duas funções muito simples e úteis:
1- Retornar um valor quando a função é declarada.

function returnValue() {
   var a = 5;
   return a;
}

2- Interromper a execução do script (pra isso basta deixar o return;). Neste caso, não é necessário retornar nenhum valor, como no caso abaixo:

function returnValue() {
   var a;
   if(a != null){
       return;
   }
   a = 5;
   return a;
}

jQuery

Vantagens e desvantagens do jQuery em relação ao JavaScript

Vantagens

  • Validação feita em todos os browsers: o código funcionará em todos os navegadores em todas as versões.
  • Sintaxe mais simples e prática: para utilizar uma classe, basta declarar $(“nome_da_classe”).
// jQuery
$( "div.demo-container" ).html();

Find the closer item in the list from address

function closerItem() {
  
  var id = "1JA9utI4cYiwHcIWw1uTFE4UHJjyuoTs1LlmgVVgxnXY";
  var name = "Empreendimentos";
  
  var TRIX = SpreadsheetApp.openById(id).getSheetByName(name);
  
  var rows = TRIX.getRange("A2").getValue();

  var dados_raw = new Array(new Array());
  dados_raw = TRIX.getRange("C4:D68").getValues();

  var data = new Array(new Array());
  
  var lat1;
  var lon1;
  var lat2;
  var lon2;
  
  var i;
  var j;
  
  for(i = 0; i <= rows - 1; i++) {
    
    var row = 1;
    var minor = 0;
    
    for (j = 0; j <= rows - 1; j++) {
      
      Logger.log(
        dados_raw[i][0] + " - " +
        dados_raw[i][1] + " - " +
        dados_raw[j][0] + " - " +
        dados_raw[j][1]);
      
      lat1 = dados_raw[i][0];
      lon1 = dados_raw[i][1];
      lat2 = dados_raw[j][0];
      lon2 = dados_raw[j][1];
      
      var dist = distance(lat1, lon1, lat2, lon2);
      
      // data[cliente][outros]
      if(dist != 0) {
                
        if(minor == 0 || dist < minor) { 
          
          minor = dist;
          row = j;
        }
      } else {
       
        //
           
      }
    }
    
    TRIX.getRange("F" + (i + 4)).setValue(minor);
    TRIX.getRange("G" + (i + 4)).setValue(row + 4);
  }
}

Get Latitude and Longitude from Address


function latlong() {
  
  var id = "id";
  var name = "name_sheet";

  var TRIX = SpreadsheetApp.openById(id).getSheetByName(name);
  
  var num_rows = "A2";
  var column_lat = "C";
  var column_long = "D";
 
  
  var i = 0;
  var j = TRIX.getRange(num_rows).getValue();
  
  for (i ; i <= j; i++) {
    
    var value = TRIX.getRange("B" + (i + 4)).getValue();
    var response = Maps.newGeocoder().geocode(value + ", São Paulo, Brazil");
    var result = response.results[0];
    
    Logger.log('%s: %s, %s', result.formatted_address, result.geometry.location.lat, result.geometry.location.lng);
    // TRIX.getRange("C" + (i + 4)).setValue(result.formatted_address);
    TRIX.getRange(column_lat + (i + 4)).setValue(result.geometry.location.lat);
    TRIX.getRange(column_long + (i + 4)).setValue(result.geometry.location.lng);
        
  }  
}

Calculate distance of two latitude longitude points

function distance(lat1, lon1, lat2, lon2) {

  var R = 6371; // km
  
  var dLat = toRad(lat2 - lat1);
  var dLon = toRad(lon2 - lon1);
  
  var lat_1 = toRad(lat1);
  var lat_2 = toRad(lat2);
   
  var a = Math.sin(dLat/2) * Math.sin(dLat/2) + Math.sin(dLon/2) * Math.sin(dLon/2) * Math.cos(lat_1) * Math.cos(lat_2); 
  var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
  var d = R * c;
  
  return d;

}

function toRad(x) {
   return x * Math.PI / 180;
}

Load MySQL entries using Python

#!/usr/bin/python
import MySQLdb

db = MySQLdb.connect(host="mysql.example.com.br", port=3306, user="user", passwd="pass", db="db")
cursor = db.cursor()
cursor.execute("SELECT * FROM Users LIMIT 5")

data = cursor.fetchall()
db.close()

info = "
  • " + str(data[0][0]) + " - " + str(data[0][1]) + " - " + str(data[0][2]) + "
  • " print "Content-type: text/htmlnn" print print """

    Hello """ + str(data[0][0]) + """!

      """ + info + """ """ import gc gc.collect()

    Script para enviar email quando o Google Form for preenchido

    function sendEmails() {
    
      // A planilha que recebe as mensagens do formulário
      var sheet = SpreadsheetApp.openByUrl('https://docs.google.com/spreadsheet/ccc?key=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#gid=0');
    
      // O email que receberá os avisos
      var emailAddress = "exemplo@exemplo.com";
      
      // Selecionar as células da planilha entre A2:F20
      var dataRange = sheet.getRange("A2:F20");
    
      // Selecionar os valores nas células
      var data = dataRange.getValues();
      
      for (var i = 0; i < data.length; ++i) {
        
        var row = data[i];
        
        var timestamp = row[0];
        var assunto = row[1];
        var mensagem = row[2];
        var nome = row[3];
        var email = row[4];
        var flag = row[5];
        
        if(flag != 1) {
          
          var message = row[0] + " - " + row[1] + " - " + row[2] + " - " + row[3] + " - " + row[4] + " - " + row[5];
          var subject = "Novas mensagens do formulario";
     
          MailApp.sendEmail(emailAddress, subject, message);
          
          sheet.getRange("F" + ( i - 1) ).setValue(1);
        
          // Make sure the cell is updated right away in case the script is interrupted
          SpreadsheetApp.flush();
        
        }
      
      }
    
    }
    

    Projeto Acesso a Dados em Java

    package br.com.impacta.classes;
    
    import java.util.Date;
    
    public class Funcionario {
    
    	private int codigo;
    	private String nome;
    	private Date dataNascimento;
    	private String cargo;
    	private double salario;
    	private int sexo;
    
    	public int getCodigo() {
    		return codigo;
    	}
    
    	public void setCodigo(int codigo) {
    		this.codigo = codigo;
    	}
    
    	public String getNome() {
    		return nome;
    	}
    
    	public void setNome(String nome) {
    		this.nome = nome;
    	}
    
    	public Date getDataNascimento() {
    		return dataNascimento;
    	}
    
    	public void setDataNascimento(Date dataNascimento) {
    		this.dataNascimento = dataNascimento;
    	}
    
    	public String getCargo() {
    		return cargo;
    	}
    
    	public void setCargo(String cargo) {
    		this.cargo = cargo;
    	}
    
    	public double getSalario() {
    		return salario;
    	}
    
    	public void setSalario(double salario) {
    		this.salario = salario;
    	}
    
    	public int getSexo() {
    		return sexo;
    	}
    
    	public void setSexo(int sexo) {
    		this.sexo = sexo;
    	}
    
    }
    
    package br.com.impacta.classes;
    
    import java.sql.*;
    
    public class AcessoDados {
    
    	/*
    	 * Connection define o objeto responsável por criar e manter a conexao com o
    	 * banco de dados.
    	 */
    
    	private Connection cn;
    
    	/*
    	 * PreparedStatement (Instrução preparada). Através dele métodos são
    	 * executados para manipulação dos dados. Inserir, consultar, remover
    	 * registros.
    	 */
    
    	private PreparedStatement st;
    
    	/*
    	 * ResultSet é específico para consulta. Ele mantém a consulta ativa a
    	 * partir de um objeto PreparedStatement.
    	 */
    
    	private ResultSet rs;
    
    	/*
    	 * String de conexão para o MySQL
    	 */
    
    	private String conexao = "jdbc:mysql://localhost:3306/funcionarios_db";
    
    	// private String conexao =
    	// "jdbc:odbc://localhost:3306/funcionarios_db?user=root&password=password";
    
    	/*
    	 * Método para abrir a conexão
    	 */
    
    	private void abrirConexao() {
    
    		try {
    			Class.forName("com.mysql.jdbc.Driver");
    			cn = DriverManager.getConnection(conexao, "root", "password");
    		} catch (Exception e) {
    		}
    	}
    
    	/*
    	 * Método para fechar conexão
    	 */
    
    	private void fecharConexao() throws Exception {
    		cn.close();
    	}
    
    	public String incluirFuncionario(Funcionario func) throws Exception {
    
    		String msg = "Funcionário incluido com sucesso!";
    
    		/*
    		 * O finally tem o objetivo de ser executado independentemente de ter um
    		 * erro, uma exceção, ou o cõdigo executar normalmente. Todos os métodos
    		 * que tentam realizar alguma ação no banco de dados deve lançar uma
    		 * exceção (por isso o throws Exception).
    		 */
    
    		try {
    			st = cn.prepareStatement("INSERT INTO FUNCIONARIOS "
    					+ "(CODIGO, NOME, DATANASC, CARGO, SALARIO, SEXO) "
    					+ "VALUES (?,?,?,?,?,?)");
    
    			/*
    			 * Todos os métodos setInt, String, tem dois atributos: o primeiro é
    			 * a posição e o segundo é o valor.
    			 */
    
    			st.setInt(1, func.getCodigo());
    			st.setString(2, func.getNome());
    			st
    					.setDate(3, new java.sql.Date(func.getDataNascimento()
    							.getTime()));
    			st.setString(4, func.getCargo());
    			st.setDouble(5, func.getSalario());
    			st.setInt(6, func.getSexo());
    			st.executeUpdate();
    
    		} catch (Exception e) {
    			throw e;
    		} finally {
    			fecharConexao();
    		}
    
    		return msg;
    	}
    
    	public void removerFuncionario(int codigo) throws Exception {
    
    		try {
    			st = cn.prepareStatement("DELETE FROM FUNCIONARIOS WHERE CODIGO=?");
    			st.setInt(1, codigo);
    			st.executeUpdate();
    
    		} catch (Exception e) {
    			throw e;
    		} finally {
    			fecharConexao();
    		}
    	}
    
    	public Funcionario buscarFuncionario(int codigo) throws Exception {
    
    		Funcionario func = null;
    
    		try {
    
    			st = cn
    					.prepareStatement("SELECT * FROM FUNCIONARIOS WHERE CODIGO=?");
    			st.setInt(1, func.getCodigo());
    			rs = st.executeQuery();
    
    			if (rs.next()) {
    				func = new Funcionario();
    				func.setCodigo(rs.getInt("CODIGO"));
    				func.setNome(rs.getString("NOME"));
    				func.setDataNascimento(rs.getDate("DATANASC"));
    				func.setCargo(rs.getString("CARGO"));
    				func.setSalario(rs.getDouble("SALARIO"));
    			}
    
    		} catch (Exception e) {
    			throw e;
    		} finally {
    			fecharConexao();
    		}
    
    		return func;
    	}
    
    }
    

    Reading JSON information

    package br.com.montanheiro.jsontest;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    
    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.client.ClientProtocolException;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.apache.http.util.EntityUtils;
    import org.json.JSONArray;
    import org.json.JSONException;
    import org.json.JSONObject;
    
    import android.app.Activity;
    import android.os.AsyncTask;
    import android.os.Bundle;
    import android.util.JsonReader;
    import android.widget.TextView;
    import android.widget.Toast;
    
    public class Main extends Activity {
    
    	TextView tv_hello;
    	HttpClient client;
    	JSONObject json;
    
    	final static String URL = "http://api.twitter.com/1/statuses/user_timeline.json?screen_name=";
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.main);
    
    		tv_hello = (TextView) findViewById(R.id.tv_hello);
    
    		client = new DefaultHttpClient();
    		
    		new Read().execute("text");
    		
    	}
    
    	public JSONObject lastTweet(String username)
    			throws ClientProtocolException, IOException, JSONException {
    		StringBuilder url = new StringBuilder(URL);
    		url.append(username);
    
    		HttpGet get = new HttpGet(url.toString());
    		HttpResponse r = client.execute(get);
    		int status = r.getStatusLine().getStatusCode();
    
    		if (status == 200) {
    
    			HttpEntity entity = r.getEntity();
    			//InputStream content = entity.getContent();
    			String data = EntityUtils.toString(entity);
    			JSONArray timeline = new JSONArray(data);
    			JSONObject last = timeline.getJSONObject(0);
    			return last;
    			
    		} else {
    			Toast.makeText(Main.this, "error", Toast.LENGTH_LONG).show();
    			return null;
    		}
    	}
    
    	public class Read extends AsyncTask {
    
    		@Override
    		protected String doInBackground(String... params) {
    			try {
    				json = lastTweet("complicitat");
    				return json.getString(params[0]);
    			} catch (ClientProtocolException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			} catch (IOException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			} catch (JSONException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    			return null;
    		}
    
    		@Override
    		protected void onPostExecute(String result) {
    			tv_hello.setText(result);
    			
    		}
    
    	}
    }