Miesięczne archiwum: Czerwiec 2015

Twitter i Python

Cały czas zależy mi na zdalnej kontroli

było parę opcji

1. Facebook massanger – niestety FB postanowiło całkowicie zmienić messangera  i praktycznie zablokowało dostęp spod lini komend (w tym pythona itp.)

2. Google talk (hangaut) – sprawa taka sama jak w przypadku FB

3. Pushbullet (pushbullet.com) – niby działa opisze to w jakimś przyszłym wpisie. Ale mało osób to posiada

4. brak pomsyłów

5. od jakiegoś czasu siedzę na twitterze https://twitter.com/xkawakx więc czemu nie 🙂

W CAŁOŚCI OPIERAŁEM SIĘ NA RÓŻNYCH PRZYKŁADACH ZNALEZIONYCH W INTERNECIE!!! ( CZĘŚĆ KODU JEST DLA MNIE NIE ZROZUMIAŁA – ALE DZIAŁA)

instalacja jest banalnie prosta

sprowadza się do 4 komend

sudo apt-get install python-pip sudo python-dev libffi-dev libssl-dev
sudo sudo pip install --upgrade pip
sudo pip install tweepy
sudo pip install 'requests[security]'


isntalacja to jakieś 5 minut na raspberry pi 2

Tweepy chyba najpopularniejszy klient twittera pod pythona. U mnie działa !!!

Skoro instalacja była prosta 🙂 to konfiguracja musi być zakręcona

Ja założyłem nowe konto na twitterze specjalnie dla Alfreda i tej aplikacji

Ty drogi czytelniku zrobisz jak uważasz.

 

1. wchodzimy na strone https://apps.twitter.com/ i klikamy w „Create New App

tw1

2. wypełniamy cały formularz … zgadzamy się na warunki i klikamy na „Create Yout Twitter Application”

tw2

2a. Trzeba pamiętać żeby w twitterze był dodany numer telefonu inaczej nic z tego (sam się męczyłem z tym parę dni)

3. Insteresuje nas Załadka Permissions i opcja „Read, Write and Access direct messages” – bez niej Alfred nie będzie miał dostępu do prywatnych wiadomości a tak chce nim sterować

tw3

4. Po kliknięciu w update settings przechodzimy do zakładki „Keys and Access Tokens

4a. Nie wiem czy to jest wymagane ale na nowo wygenerowałem klucze klikając w „Regenerate Consumer Key and Secret

tw4

5. Klikamy na samemy dole w „Create my access token”

Mamy już wygenerowane wszystkie dane które są nam potrzebne

tw4

czyli

Consumer Key (API Key)

Consumer Secret (API Secret)

Access Token

Access Token Secret

 

Konfig i odpalenie

kod jest prosty szybki i dla mnie nic a nic nie zrozumiały (poza paroma wątkami)

import tweepy
import json
import os
import sys
reload(sys)
sys.setdefaultencoding('UTF8')
consumer_key = 'A4t1'
consumer_secret = 'jgK9A'
access_token = '33407265'
access_token_secret = 't6CegQ5RN8C'
c = '"'
s= ' '
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)
error = tweepy.error.TweepError
class CustomStreamListener(tweepy.StreamListener):
def on_direct_message(self,status):
decoded = json.dumps(status._json)
a = json.loads(decoded)
source = a['direct_message']['sender_id_str']
print a['direct_message']['sender_screen_name'] + "(" + a["direct_message"]["sender_id_str"] + ")" + ": " + a['direct_message']['text']
stream = tweepy.streaming.Stream(auth, CustomStreamListener())
streamuser = stream.userstream()
track_list = None
stream.filter( track_list)


 

Na początku importujemy to co potrzebujemy czyli

biblioteki

tweepy json os i sys

reload(sys)
sys.setdefaultencoding('UTF8')

to zmusza sprawia że polskie snaki są jako tako rozpoznawane

consumer_key = 'A4t1'
consumer_secret = 'jgK9A'
access_token = '33407265'
access_token_secret = 't6CegQ5RN8C'

 

 

uzupełniamy to naszymi danymi z twittera

auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)
error = tweepy.error.TweepError
class CustomStreamListener(tweepy.StreamListener):
def on_direct_message(self,status):

łączenie i ściaganie prywatnej wiadomości

decoded = json.dumps(status._json)
a = json.loads(decoded)

i tu niespodzianka która dla mnie do tej pory jest wielkim zaskoczeiem najpierw, najpierw musze zrzucić do dumpa status a nastepnie załadować go ponownie w json (zakręcone ale działą)

print a['direct_message']['sender_screen_name'] + "(" + a["direct_message"]["sender_id_str"] + ")" + ": " + a['direct_message']['text']

zabawa z wyświetlaniem sender_screen_name – wyświetlana nazwa osoby która do nas pisze , sender_id_str – id osoby i text jako tekst który się nam wyświetla

 

stream = tweepy.streaming.Stream(auth, CustomStreamListener())
streamuser = stream.userstream()
track_list = None
stream.filter( track_list)

pierdoły których nie rozumiem ale działają

Tak wygląda kod

twittwe

odpalamy normalnie

pyton plik.py

po odpaleniu wchodzimy na twittera i wysyłamy nową wiadomość do (bota) Alfreda

alfik

inalfi

To na tyle 🙂 w dalszych wpisach będzie rozwinięcie tematu

Samba

W życiu każdego użytkownika przychodzi moment kiedy trzeba wgrać pliki na malinę.

Ja chce to zrobić za pośrednictwem sieci lan i tzw. zasobów sieciowych

Na polskie – Malina udostępnia nam folder w sieci lokalnej (otoczenie sieciowe)

Możemy wgrywać i czytać(kopiować) pliki z tego folderu nie przejmując się systemem plików 😀

1

sudo apt-get install samba samba-common-bin

Edytujemy pliki konfiguracyjny

sudo pico /etc/samba/smb.conf

wpisujemy na końcu pliku

[pihome]
comment= Pi Home
path=/home/pi
browseable=Yes
writeable=Yes
only guest=no
create mask=0777
directory mask=0777
public=no

 

ustawiamy hasło żeby nikt nam się nie wbił

sudo smbpasswd -a pi

(Komputer Dorota wylogował się w trakcie pisania tutoriala z siebie )

2 3

Teraz możemy już wgrywać nasze pliki z komputera na malinę

ustawienia czyli ConfigParser po ludzku :-)

Zaczynamy z grubej rury 🙂 tworzymy plik konfiguracyjny „.conf”

a to jego zawartość

[live]
Slowo = Alfred
Dzialanie = calyczas
Powiedziano = tak
[lokalizacja]
kraj =  Polska
Woj = Lubuskie
Miasto =  Gorzowwielkospolski
[api]
Pushbullet =
Ivona =
wit.ai =
[Wlasciciel]
Imie = Łukasz
Nick = Kawak
Wiek = 30
[inne]



Oczywiście dane które wpiszecie zależą od was, ja dałem tylko swoje przykłady.

W nawiasach kwadratowych jest nazwa sekcji (tak dla ułatwienia ale musi być)

u mnie to są sekcje

[live]

[lokalizacja]

[api]

[Wlasciciel]

[inne]

A w środku są dane, które mogą być definiowane po : albo = (u mnie jest to  =  )

Aby odczytać dane posłużymy się modułem/biblioteką ConfigParser

import ConfigParser
config = ConfigParser.ConfigParser()
config.readfp(open(r'.conf'))
nazwa = config.get('live', 'Slowo')
kraj = config.get('lokalizacja','kraj')
owner = config.get('Wlasciciel','Nick')
print nazwa
print kraj
print owner


Tłumaczenie

import ConfigParser  – importujemy biblioteke

config = ConfigParser.ConfigParser() – nasza zmienna „config” jest plikiem knfiguracyjnym

config.readfp(open(r'.conf')) – otwieramy i czytamy nasz plik konfigurayjny (r’.conf” to ścieżka do pliku)

nazwa = config.get('live', 'Slowo') – pobieramy dane z konfiga i przypisujemy do zmiennej (z sekcji live opcja Slowo)

kraj = config.get('lokalizacja','kraj') – sekcji lokalizacja opcja kraj i

owner = config.get('Wlasciciel','Nick') – wekcja Wlasciciel opcja nick

no i

print nazwa
print kraj
print owner

na tym kończymy nasz plik 🙂

a oto wynik

odczyt


Modyfikacja danych

 

import ConfigParser
config = ConfigParser.ConfigParser()
config.read(r'.conf')
config.set('api','Ivona',r'kluczapidoivony')
config.set('Wlasciciel','Nick',r'jakisnick')
with open(r'.conf', 'wb') as configfile:
config.write(configfile)

import ConfigParser
config = ConfigParser.ConfigParser()
config.read(r'.conf')

wyjaśniłem wyżej.

config.set('api','Ivona',r'kluczapidoivony') – zapis do nazwy sekcji i opcji ostatnia wartość to to co chcemy zapisać

config.set('Wlasciciel','Nick',r'jakisnick') – zmieniamy nick właściciela z kawak na „jakisnick”

with open(r'.conf', 'wb') as configfile:
(w tym miejscu pare spacji, żeby był odstęp) config.write(configfile)

– zapisujemy nasz config

Działa 🙂

zapis

feedparser + python = wiadomości

Do poprawnego działania skryptu potrzebujemy pakietu feedparser i dobrej strony która daje swoje wpisy w rss’ie

sudo pip install feedparser

i

http://www.tvn24.pl/najnowsze.xml

i

http://feeds.feedburner.com/dobreprogramy/Aktualnosci

Kolejność i wybór są na prawdę losowe.

 

import feedparser
import sys
reload(sys)
sys.setdefaultencoding('UTF8')
feedparser._HTMLSanitizer.acceptable_elements.remove('img')
rss = feedparser.parse('http://www.tvn24.pl/najnowsze.xml')
newsfeed1 = rss.entries[0]['title'] + '. ' + rss.entries[0]['description'] + '. ' + rss.entries[1]['title'] + '. ' + rss.entries[1]['description'] + '. ' + rss.entries[2]['title'] + '. ' + rss.entries[2]['description'] + '. ' + rss.entries[3]['title'] + '. ' + rss.entries[3]['description'] + '. '
newsfeed = newsfeed1.replace('"', '')
print newsfeed

 

import feedparser importujemy feedparsera
import sys
reload(sys)
sys.setdefaultencoding('UTF8')
wymuszamy kodowanie!
feedparser._HTMLSanitizer.acceptable_elements.remove('img') ustawiamy,żeby nie było zdjęć – czyli wycinamy wszystko co będzie w znacznikach <img></img>
rss = feedparser.parse('http://www.tvn24.pl/najnowsze.xml') importujemy naszego rss’a
newsfeed1 = rss.entries[0]['title'] + '. ' + rss.entries[0]['description'] + '. ' + rss.entries[1]['title'] + '. ' + rss.entries[1]['description'] + '. ' + rss.entries[2]['title'] + '. ' + rss.entries[2]['description'] + '. ' + rss.entries[3]['title'] + '. ' + rss.entries[3]['description'] + '. '
jedna długa linijka 🙂 czyli wyciągamy 3 wpisy dokładniej to ich tytuły i zawartość
newsfeed = newsfeed1.replace('"', '') zastępujemy ” niczym czli ”
print newsfeed wyświetlamy to co otrzymaliśmy.

 

wiad

Tak wiem, kolejny skrypt który wyświetla wynik w jednej linijce.

 


Dobre programy

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

import feedparser
import sys
reload(sys)
sys.setdefaultencoding(‚UTF8’)
feedparser._HTMLSanitizer.acceptable_elements.remove(‚img’)
rss = feedparser.parse(‚http://feeds.feedburner.com/dobreprogramy/Aktualnosci’)

newsfeeddp = rss.entries[0][‚title’] + ‚. ‚ + rss.entries[0][‚description’] + ‚. ‚ + rss.entries[1][‚title’] + ‚. ‚ + rss.entries[1][‚description’] + ‚. ‚ + rss.entries[2][‚title’] + ‚. $

newsfeeddp1 = newsfeeddp.replace(‚n’, ”)
newsfeeddp2 = newsfeeddp1.replace(‚&hellip;’, ”)

print newsfeeddp2

 

wiad2