Tugas II
II5166 (Keamanan Informasi Lanjut)
Membuat aplikasi TWITTER yang mengambil data dari API-nya TWITTER
Semester 1 - 2012/2013
Dosen: Dr. Ir. Budi Rahardjo
Dikerjakan Oleh:
23512036 - Wahyu Widodo
23512076 - Perdana Kusumah
23512098 - Aries Syamsuddin
LAYANAN TEKNOLOGI INFORMASI
S
EKOLAH
T
EKNIK
E
LEKTRO DAN
I
NFORMATIKA
I
NSTITUT
T
EKNOLOGI
B
ANDUNG
2012
Tata Cara Pembuatan Aplikasi
Aplikasi yang dibuat menggunakan
tool
pengembangan Microsoft Visual Studio .NET, dengan bahasa
pemrograman C#. Aplikasi tersebut merupakan aplikasi
desktop-based
.
Urutan cara kerja pengerjaannya:
1.
Baca API yang disediakan oleh
, dengan parameter masukan berupa
userID
yang akan
diambil datanya.
2.
Ambil datanya dalam bentuk XML.
3.
Baca
tag
XML yang diambil, kemudian masukkan ke dalam
object
penampung.
4.
Object
penampung tersebut akan terisi dengan
nodes
XML (berbentuk
tree
).
5.
Ekstrak
nodes
yang diperlukan.
6.
Isi ke dalam suatu penampung yang bertindak sebagai
viewer
(dapat berupa
listbox
,
combobox
,
datagrid
, dan lain-lain).
Pada pembuatan aplikasi ini, hanya memastikan bahwa fungsi pengambilan data dari twitter berhasil
dilakukan, belum meng-cover masalah
error-handling
.
Tampilan / Screenshot
1.
Tampilan awal, berisi 1
field
untuk
input
data dari
user
dan 3
fields
untuk penampung
output
dari
hasil
searching
userID
ke dalam
twitter.com
.
Gambar 1. Awal
2.
Entri parameter masukan
userID
, pengguna aplikasi hanya perlu memasukkan data
userID
atau
Gambar 2.
Input user
3.
Output
aplikasi, hasil
searching
akan menghasilkan data
profile
dari seseorang yang memiliki
account
, daftar
friends
-nya, dan daftar
follower
-nya. Untuk data
friends
dan
followers
hanya dimunculkan data 100 besarnya saja.
Gambar 3.
Output
LAMPIRAN – Source-code Aplikasi
//given-library using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; //tambahan library using System.Xml; using System.Net; using System.IO; using System.Data; namespace TugasTwitter { /// <summary>/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } /// <summary>
/// fungsi mengambil data XML dari API-nya TWITTER
/// </summary>
/// <param name="uri"></param>
/// <returns></returns>
public static XmlDocument GetResponse(string uri) {
//kamus data
WebRequest req; XmlDocument doc; //algoritma
req = WebRequest.Create(new Uri(uri)); doc = new XmlDocument();
doc.Load(req.GetResponse().GetResponseStream()); return doc;
}
/// <summary>
/// fungsi mengambil data XML dari API-nya TWITTER, menggunakan username dan password
/// </summary> /// <param name="uri"></param> /// <param name="username"></param> /// <param name="password"></param> /// <param name="post"></param> /// <returns></returns>
public static XmlDocument GetResponse(string uri, string username, string password, bool post) {
//kamus data
WebRequest req; XmlDocument doc; //algoritma
req = WebRequest.Create(new Uri(uri)); if (post)
if ((username != null) && (username.Trim() != String.Empty) && (!String.IsNullOrEmpty(password)))
req.Credentials = new NetworkCredential(username.Trim(), password); doc = new XmlDocument();
doc.Load(req.GetResponse().GetResponseStream()); //return value return doc; } /// <summary>
/// Fungsi tambahan apabila ingin memasukkan data XML ke dalam String
/// </summary>
/// <param name="xml"></param>
/// <returns></returns>
public static string ConvertXml2String(XmlDocument xml) {
//kamus data
StringWriter stringWriter; XmlTextWriter xmlTextWriter; //algoritma
//inisialisasi create object
stringWriter = new StringWriter();
xmlTextWriter = new XmlTextWriter(stringWriter); xml.WriteTo(xmlTextWriter);
//return value
return stringWriter.ToString(); }
/// <summary>
/// Fungsi tambahan apabila ingin memasukkan data XML ke dalam Dataset
/// </summary>
/// <param name="fileName"></param>
/// <returns></returns>
public static DataSet ConvertXml2Dataset(string fileName) {
//kamus
DataSet dataSet; //algoritma
//inisialisasi
dataSet = new DataSet(); //read into dataset
dataSet.ReadXml(fileName);
//return single table inside of dataset
return dataSet; }
/// <summary>
/// fungsi search data dari suatu account twitter, merupakan gabungan dari beberapa fungsi yang telah didefinisikan
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnSearch_Click(object sender, RoutedEventArgs e) {
//KAMUS DATA
XmlDocument doc, docFriends, docFollower; XmlElement rootUser, rootFriends, rootFollowers; XmlNodeList elemListFriends, elemListFollowers; //ALGORITMA //inisialisasi lbInfoUser.Items.Clear(); lbFriends.Items.Clear(); lbFollower.Items.Clear(); //ambil data dari TWITTER API
doc = GetResponse("http://api.twitter.com/1/users/show.xml?screen_name=" + textBox1.Text +
"");
docFriends = GetResponse("http://api.twitter.com/1/statuses/friends.xml?screen_name=" + textBox1.Text + "");
docFollower = GetResponse("http://api.twitter.com/1/statuses/followers.xml?screen_name=" + textBox1.Text + "");
imgUser.Source = new BitmapImage(new
Uri("http://api.twitter.com/1/users/profile_image?screen_name=" + textBox1.Text + "&size=normal"));
//informasi user
rootUser = doc.DocumentElement;
//informasi friends
rootFriends = docFriends.DocumentElement; //root-nya adalah <users type="array"></users>
elemListFriends = rootFriends.ChildNodes; //elemennya terdiri dari <user></user> ... <user></user> //informasi follower rootFollowers = docFollower.DocumentElement; elemListFollowers = rootFollowers.ChildNodes;
//memuculkan informasi USER
lbInfoUser.Items.Add("Nama Lengkap: " + rootUser.GetElementsByTagName("name").Item(0).InnerText); lbInfoUser.Items.Add("Alias: " +
rootUser.GetElementsByTagName("screen_name").Item(0).InnerText); lbInfoUser.Items.Add("Lokasi: " +
rootUser.GetElementsByTagName("location").Item(0).InnerText); lbInfoUser.Items.Add("Deskripsi: " +
rootUser.GetElementsByTagName("description").Item(0).InnerText);
//entri data ke dalam listbox FRIENDS
for (int i = 0; i < elemListFriends.Count; i++) {
// Item(i) mengambil satu demi satu node user,
// ChildNodes[...] mengambil komponen dari suatu node user
lbFriends.Items.Add((i + 1).ToString() + ". Nama Lengkap: " + elemListFriends.Item(i).ChildNodes[1].InnerText);
lbFriends.Items.Add(" Alias: " + elemListFriends.Item(i).ChildNodes[2].InnerText); lbFriends.Items.Add(" Lokasi: " + elemListFriends.Item(i).ChildNodes[3].InnerText); lbFriends.Items.Add(" ");
}
//entri data ke dalam listbox FOLLOWER
for (int i = 0; i < elemListFollowers.Count; i++) {
// Item(i) mengambil satu demi satu node user,
// ChildNodes[...] mengambil komponen dari suatu node user
lbFollower.Items.Add((i + 1).ToString() + ". Nama Lengkap: " + elemListFollowers.Item(i).ChildNodes[1].InnerText); lbFollower.Items.Add(" Alias: " + elemListFollowers.Item(i).ChildNodes[2].InnerText); lbFollower.Items.Add(" Lokasi: " + elemListFollowers.Item(i).ChildNodes[3].InnerText); lbFollower.Items.Add(" "); }
//apabila ingin dimasukkan ke dalam datagrid
//string[] col = {"name"};
//DataTable dt = ConvertXmlNodeListToDataTable2(elemList, col);
//dataGrid1.ItemsSource = dt.AsDataView();
}
/// <summary>
/// Fungsi tambahan apabila ingin memasukkan data XML ke dalam DataTable
/// </summary>
/// <param name="xnl"></param>
/// <returns></returns>
public static DataTable ConvertXmlNodeListToDataTable(XmlNodeList xnl) {
//kamus
DataTable dt; int TempColumn;
//algoritma
//inisialisasi
dt = new DataTable(); TempColumn = 0;
foreach (XmlNode node in xnl.Item(0).ChildNodes) {
TempColumn++;
DataColumn dc = new DataColumn(node.Name, System.Type.GetType("System.String")); if (dt.Columns.Contains(node.Name))
{
dt.Columns.Add(dc.ColumnName = dc.ColumnName + TempColumn.ToString()); } else { dt.Columns.Add(dc); } }
int ColumnsCount = dt.Columns.Count; for (int i = 0; i < xnl.Count; i++) {
DataRow dr = dt.NewRow();
for (int j = 0; j < ColumnsCount; j++) { dr[j] = xnl.Item(i).ChildNodes[j].InnerText; } dt.Rows.Add(dr); } //return value return dt; } /// <summary>
/// Fungsi tambahan apabila ingin memasukkan data XML ke dalam DataTable
/// </summary>
/// <param name="xmlNodeList"></param>
/// <param name="Columns"></param>
/// <returns></returns>
public DataTable ConvertXmlNodeListToDataTable2(XmlNodeList xmlNodeList, string[] Columns) {
//kamus
DataTable dataTable; //algoritma
//Creating the DataTable.
using (dataTable = new DataTable("DataTable")) {
//Adding data Table columns based on the columns parameter
foreach (string column in Columns) {
dataTable.Columns.Add(column); }
//Adding rows with values.
DataRow dataRow;
foreach (XmlNode node in xmlNodeList) {
dataRow = dataTable.NewRow(); foreach (string column in Columns) { if (node != null) { dataRow[column] = node.SelectSingleNode(column).InnerText; } } dataTable.Rows.Add(dataRow); } //return value return dataTable; } } } }