Sosyal Medya Madenciligi — Python & Twitter

Abdullah Kurkcu
4 min readJul 30, 2014

Sosyal medya madenciligi (Mining the Social Web, Data Mining) ulkemizde ne kadar cok populer olmasa da dunya uzerinde bircok kisi tarafindan ilgiyle takip ediliyor. Twitter, hizli bir sekilde mesajlasma platformu saglamasinin yaninda program gelistirenler icin bir arayuze de sahip. Bu arayuz sayesinde, profili halka acik olan kisilerin paylastigi durumlari takip etmenin yani sira kimin kac takipcisi var, bir post ne kadar paylasilmis gibi detayli analiz yapmak da mumkun.

Herkesin paylastigi “tweet”ler Twitter’in streaming API, Turkcesiyle sanirim akiskan iletim, diye adlandirilan bir data nehrine katiliyor. Nehir benzetmesi streaming API’in calisma mantigiyla birebir ortusuyor. Tweetlerin stream’e katilmasi gercek zamanli olurken, gecmise yonelik tweetleri gormek mumkun olmuyor. Haliyle gecmise yonelik bir arastirma yapmak pek de mumkun degil. Atalarimizin dedigi gibi, eger ki streamdeki tweetleri kaydetmediyseniz, soylenecek en iyi laf “O koprunun altindan cok sular gecti.” olacaktir.

Streaming API’a erisim bircok programlama diliyle gerceklestirilebilir. Ben, sizlere bunun Python ile nasil yapilacagini aciklayacagim. Oncelikle neleri bilmeniz gerektigini ya da en azindan baslangic derecesinde bilgi sahibi olmaniz gerektigini ve zorluk derecelerini (5 uzerinden) acikliyorum.

  • MySQL nasil kullanilir, sema ve tablo nasil olusturulur? (4/5)
  • Python nedir, en temel kodlama islemleri nelerdir? (2/5)
  • Python kutuphaneleri nasil eklenir? (3/5)
  • Twitter developer’da nasil uygulama olusturulur? (1/5)

Eger ki yeterli bilgiye sahipseniz bilgisayarinizda olmasi gerekenleri siraliyorum.

  • Python 2.7 veya daha ustu (Ben 2.7 kullaniyorum)
  • Tweepy (Twitter API icin gerekli Python kutuphanesi)
  • MySQLdb (MySQL database’e baglanmak icin gerekli Python kutuphanesi)
  • Twitter Developer Initials ( Twitter’in developer sayfasindan alacaginiz kullanici adi sifre ve ozel anahtarlar)
  • MySQL Database (Tweetleri kaydetmemiz icin gerekli)

Programlarin hepsi ucretsiz. Bunlarla ilgili probleminiz olursa benle iletisime gecebilirsiniz. Gerekli olan programlari yuklediginizi varsayip anlatmaya basliyorum.

Python’da oncelikle indirdigimiz kutuphaneyi import etmemiz gerekiyor. Import islemi kutuphanedeki onceden tanimli fonksiyonlari kullanmamiza olanak verir. Haliyle bir kutuphaneyi import ettigimizde, o kutuphanedeki hazir fonksiyonlari kendimiz define etmeden kullanabiliyoruz. Import kismini kendi kodumdan direkt olarak kopyalayacagim, bazi kisimlari gereksiz olabilir.

from tweepy.streaming import StreamListener
from tweepy import OAuthHandler
from tweepy import Stream
from dateutil import parser
from django.utils.encoding import smart_str
import MySQLdb
from datetime import timedelta
from datetime import datetime
import schedule
import time
import datetime
import sys
import webbrowser
import random

# http://dev.twitter.com uygulama yaratin (create app).
# Daha sonrasinda size consumer_key ve secret verecektir.
consumer_key=”Buraya consumer key girilecek”
consumer_secret=”Kendi consumer secretiniz buraya girilecek”

# Uygulamazin sayfasina gidin.
# Access token kismindan bir access code olusturduguzda gerekli bilgiler karsiniza cikacaktir.
access_token=”uzunca bir access kodu”
access_token_secret=”ve tabi ki sifresi”

App’i olusturduktan sonra yapmamiz gereken database’imize baglanmak olacaktir. MySQL database’de twitter icin bir sema olusturun. Bu semanin icerisine de tweets adi altinda bir tablo olusturun. Tablo olusturmak icin gerekli “create” kodu asagidaki gibidir.

CREATE TABLE twitter.`tweets` ( `t_id` varchar(45) NOT NULL, `tweet` varchar(255) DEFAULT NULL, `created_at` datetime DEFAULT NULL, `latitude` varchar(45) DEFAULT NULL, `longitude` varchar(45) DEFAULT NULL, `screen_name` varchar(45) DEFAULT NULL, PRIMARY KEY (`t_id`), UNIQUE KEY `t_id_UNIQUE` (`t_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Olusturdugunuzda tablonuzun resimdeki gibi olmasi gerekiyor.

Tabloyu olusturduktan sonra Python kodunu data base’e baglamak icin gerekli python kodu asagidaki gibidir.

db=MySQLdb.connect(host=’localhost’, user=’kullanici adiniz’, passwd=’sifreniz’, db=’twitter’)
db.set_character_set(‘utf8')

Artik genel fonksiyonumuzu yazmanin zamani geldi. Twitter’da bazi tweetler lokasyon bilgisine sahip. Bazilarinda ise bu bilgi eksik, akiskan iletimde bu bilgiye sahip olmayan tweetler bazen sorun cikartiyor. Ben bu ornekte Twitter datasini lokasyon olarak limitleyecegim. Haliyle benim birincil amacim lokasyon bilgisi olan tweetleri toplamak. Bunun icin oncelikle bir XY koordinatini barindiracak liste ve koordinatlarin depolanacagi bir sozluk tanimlayacagim.

Coords = dict()
XY = []
curr=db.cursor()

Sonrasinda da genel fonksiyonumu tanimlayacagim.

Bunu class ya da fonksiyon olarak tanimlamaniz cok fazla bir degisiklige sebep olmaz, ben burada class kullandim isterseniz function olarak da tanimlayabilirsiz.

En sonunda da stream’i filtreleyen kod iler birlikte ana fonksiyonumuzu yazmamiz gerekir.

Bunlari da yazdiktan sonra kodumuz hazir. Calistirdigimizda ekrana sadece tweet idlerini gosterecektir. Tweetleri database’e atacak ve hata verdiginde ise 60 ile 63 saniye arasinda kendisini uyku moduna alacaktir. Isteyenlere hazir yazilmis kodu atabilirim fakat kendiniz oynarsaniz, ilerde cikacak problemleri cozmeniz daha da kolaylasir.

Bol sans ☺

Bu arada Git adresini soranlar olmus. Merak edenler icin kodu yukledim. Buyrun:

https://github.com/ak4728/twitter-streaming

--

--