ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
CHƯƠNG TRÌNH ĐẠO TẠO THẠC SĨ CNTT QUA MẠNG
________ ________
BÀI THU HOẠCH
CHUYÊN ĐỀ CƠ SỞ DỮ LIỆU NÂNG CAO
KHAI THÁC MỐI QUAN HỆ XÃ HỘI TRONG MẠNG
XÃ HỘI TWITTER
Giáo viên hướng dẫn:
PGS TS.ĐỖ PHÚC
Học viên thực hiện:
Thái Hồng Quang
CH1101033
Lớp:
Page 1
Thạc sỹ CNTT qua mạng khoá 06
MỞ ĐẦU
Ngày nay, sự phát triển của công nghệ thông tin nói chung và kiến trúc mạng nói riêng
đã và đang đạt được những bước tiến nhất định. Công nghệ thông tin đang dần được
đưa vào ứng dụng trong mọi lĩnh vực của cuộc sống, từ việc điều khiển các thiết bị
một cách tự động, hỗ trợ hoạt động kinh doanh, sản xuất của con người, cho đến việc
giả lập chính xã hội loài người – mạng xã hội.
Mạng xã hội ra đời đã trở thành một trào lưu mới trong mọi tầng lớp sử dụng máy tính
và Internet làm công cụ giao lưu, tìm kiếm kiến thức. Mạng xã hội giúp thu hẹp
khoảng cách giữa người với người, góp phần biến thế giới mà chúng ta đang sinh sống
trở thành một “thế giới phẳng”. Với khả năng kết nối, chia sẻ thông tin một cách dễ
dàng, mạng xã hội dần trở thành một kho kiến thức khổng lồ. Và từ đây, nhu cầu tìm
kiếm, phân tích lượng thông tin khổng lồ trong rất nhiều mạng xã hội đang tồn tại và
phát triển trở nên cần thiết hơn bao giờ hết.
Tuy thế, các công nghệ tìm kiếm hiện tại đứng đầu là Google đều chưa thể tận dụng
hết khả năng của mạng xã hội. Bởi lẽ mạng xã hội có cấu trúc rất mở, các thành phần
được gắn kết với nhau theo dạng quan hệ (một chiều, hai chiều) nên việc tìm kiếm
thông tin trên mạng xã hội phải làm việc ở mức phân tích quan hệ, tìm kiếm các đặc
điểm. Với cấu trúc nguồn mở và API hổ trợ phổ biến nên thông tin về các node
friend ,đăng nhập và tồn tại từ lâu đời twitter đã trở thành hệ thống xã hội khá phổ
biến như hiện na
Trên cơ sở đó, bài thu hoạch này tập trung tìm hiểu và làm rõ hơn khả năng tận dụng
các API mở vào việc xử lý các bài toán dựa trên quan hệ trên các mạng xã hội, để từ
đó tạo tiền đề cho các bài toán lớn hơn, giải quyết vấn đề thu thập, tìm kiếm và phân
tích thông tin trên diện rộng.
Do giới hạn của một bài thu hoạch, tất cả những ứng dụng của API cũng như việc ứng
dụng API vào các bài toán phân tích trong mạng xã hội sẽ không thể được trình bày
một cách đầy đủ và chi tiết, cho nên khóa luận tốt nghiệp này sẽ bao gồm ba phần
chính. Phần đầu nhằm giới thiệu về mạng xã hội, trình bày các đặc điểm của mạng xã
Page 2
hội. Phần thứ hai cung cấp cái nhìn chi tiết hơn về mạng xã hội hiện nay là twitter và
cách sử dụng các API kết nối đến profile của user ,danh sách và các link của friend.
CHƯƠNG 1: MẠNG XÃ HỘI VÀ CÁC BÀI TOÁN LIÊN QUAN
Theo Wikipedia Error: Reference source not found và Whatissocialnetworking.com
Error: Reference source not found, Mạng xã hội, hay còn gọi là mạng xã hội ảo (tiếng
Anh: social network) là một cấu trúc mang tính xã hội tạo thành từ các nút (tiếng Anh:
node), mỗi nút đó có thể là một cá nhân, hay một tổ chức. Mạng xã hội làm nhiệm vụ
kết nối các thành viên, người dùng trên Internet lại với nhau dựa theo những tiêu chí
nào đó, với nhiều mục đích khác nhau, không phân biệt thời gian và không gian.
Hình 1 : Đồ thị biểu diễn cấu trúc đơn giản mạng xã hội
Cấu trúc xã hội của mạng xã hội được thể hiện ở cách thức mạng xã hội “giả lập” xã
hội loài người. Mạng xã hội nhìn nhận những mối quan hệ xã hội thông qua các nút và
ràng buộc giữa các nút. Trong một mạng xã hội, các nút là các cá thể, và ràng buộc
giữa chúng là các mối quan hệ giữa các cá thể đó. Với một cấu trúc đơn giản nhất như
thế, một mạng xã hội có thể được biểu diễn như một “đồ thị” như Hình 1 trong đó
mỗi cá thể, mỗi nút là một điểm trên đồ thị, và quan hệ giữa chúng được thể hiện là
một đoạn nối điểm này với điểm khác.
Page 3
1.1 Lịch sử Mạng xã hội
Mạng máy tính (tiếng Anh: computer network) ra đời làm nền tảng cho sự xuất hiện
của mạng xã hội.
Có một vài cách tiếp cận khác nhau về mạng xã hội. Cách tiếp cận đầu tiên cho rằng
mạng xã hội là một nơi để mọi người có thể tương tác với nhau thông qua các phòng
trò chuyện (tiếng Anh: chat room), chia sẻ thông tin cá nhân, ý tưởng qua các chủ đề
được tạo lập trên những trang cá nhân, mà về sau này được gọi là “blogging”. Những
mạng xã hội dạng này thì đã xuất hiện từ năm 1985 với THE WELL, Theglobe.com
(1994), Geocities (1995) và Tripod (1995).
Còn với một cách tiếp cận khác, đơn giản hơn thì mạng xã hội là nơi mà mọi người có
thể kết nối với nhau thông qua địa chỉ thư điện tử của họ. Mạng xã hội đầu tiên của
dạng này – Classmates Error: Reference source not found – ra đời vào năm 1995 với
mục đích kết nối học, tiếp đó SixDegrees được tạo ra vào năm 1997 là với mục đích
giao lưu kết dựa theo sở thích.
Năm 2002, Friendster Error: Reference source not found ra đời và mau chóng trở
thành trào lưu tại Mỹ. Tuy vậy do phát triển quá nhanh mà thiếu đi sự tính toán đối
với phân tải đã khiến các server của dịch vụ này hay bị xảy ra hiện tượng quá tải.
Công ty này sau đó có được Google đề nghị mua lại với trị giá khoảng 30 triệu đô la
Mỹ tuy nhiên thương vụ không thành công.
Năm 2004, MySpace Error: Reference source not found đi vào hoạt động, nhanh
chóng nổi bật với các tính năng mới hấp dẫn, trong đó phải kể đến tính năng chia sẻ
nhạc. Dịch vụ này đã thu hút được rất nhiều các ban nhạc tham gia vào mạng xã hội
MySpace, từ đó giúp cho mạng xã hội này có thêm được rất nhiều những thành viên
quan tâm, để rồi trở thành mạng xã hội lớn nhất thế giới cho tới tận thời điểm hiện
nay.
Năm 2006 đánh dấu sự có mặt của Facebook Error: Reference source not found (thực
ra là việc mở rộng phạm vi của mạng xã hội này ra toàn cầu thay vì cho cộng đồng các
trường đại học tại Mỹ vốn đã tồn tại từ năm 2004), một mạng xã hội “mở”. Facebook
cung cấp một nền tảng lập trình gọi là Facebook Platform cho phép những thành viên
Page 4
chuyên sâu có thể tạo ra các ứng dụng (tiếng anh: Applications). Nhờ vậy Facebook
có được rất nhiều các ứng dụng vừa được cập nhật một cách nhanh chóng, lại vừa phù
hợp với nhiều đối tượng với các sở thích cá nhân khác nhau.
Ngoài ra hiện nay còn có một trào lưu mới xuất hiện nhưng cũng đã phát triển hết sức
nhanh chóng, đó là Twitter Error: Reference source not found. Nếu như các mạng xã
hội trước kia thường được gọi là blogging thì Twitter còn được gọi là micro-blogging
Error: Reference source not found. Được gọi như vậy bởi Twitter chỉ cung cấp cho
người dùng khả năng tạo ra những dòng tin nhắn nhanh và ngắn gọn cỡ 140 ký tự (gần
giống với số ký tự cho phép trong một tin nhắn SMS Error: Reference source not
found trên điện thoại di động).
Bảng 1 đưa ra một vài con số thống kê nhỏ về mạng xã hội và sự phát triển của chúng
trong thời gian gần đây dựa vào hai tiêu chí cơ bản là số lượng người dùng (thống kê
vào thời điểm đầu năm 2009) và xếp hạng lưu lượng truy cập tại trang thống kê nổi
tiếng Alexa (thống kê được ghi lại vào thời điểm tháng 5 năm 2009)
Bảng 1 : Thông tin về các dịch vụ mạng xã hội phổ biến
Tên dịch vụ Thời gian ra đời
Số lượng người
dùng Error:
Reference source
not found - 2009
Global Alexa page
Ranking Error:
Reference source not
found – 5/2009
Bebo bebo Tháng 1/2005 40 triệu 143
Classmates 1995 50 triệu 510
Facebook Tháng 2/2004 200 triệu 4
Flixster Tháng 6/2005 63 triệu 584
Friendster 2002 90 triệu 54
Habbo 2000 (Phần Lan) 117 triệu 3812
hi5 27/6/2003 80 triệu 24
LinkedIn Tháng 5/2003 40 triệu 101
Page 5
MySpace Tháng 8/2003 Khoảng 253 triệu 9
Netlog 2004 42 triệu 99
Orkut 22/1/2004 67 triệu 107
Reunion
(MyLife.com)
2002 51 triệu 2555 (1086)
Tagged Tháng 10/2004 70 triệu 72
Twitter 2006 25 triệu 49
Windows live
spaces
Đầu năm 2004 120 triệu 5
1.2 Đặc điểm Mạng xã hội (ảo)
Error: Reference source not found
Có thể nói Mạng xã hội có thể phát triển mạnh mẽ được như hiện nay là do những ưu
thế đáng kể mà chúng mang lại so với các cách tiếp cận cộng đồng truyền thống.
Đầu tiên là vấn đề chi phí. Có thể thấy rằng việc tham gia vào một mạng xã hội, dù là
đối với một cá nhân hay một tổ chức đều chiếm một chi phí tương đối thấp, bởi trên
thực tế, các mạng xã hội hiện nay hầu hết cho phép đăng ký và sử dụng miễn phí.
Trong khi đó, khi đã trở thành một thành viên của một mạng xã hội, các cá nhân hay
tổ chức đó có thể có được rất nhiều thông tin hữu ích cho mối quan tâm, sự phát triển
của mình. Ví dụ như một công ty sau khi tham gia một mạng xã hội nào đó, có thể chỉ
cần vài cú nhấp chuột là đã có thể tìm hiểu về các sở thích của người dùng, xu hướng
của những sở thích đó. Qua đó, công ty có thể phát hiện ra được những khách hàng
tiềm năng, vạch ra một chiến lược kinh doanh mới cho thời kỳ khó khăn … Những
việc làm này có thể giúp ích rất nhiều cho hoạt động kinh doanh hiện tại của công ty
đó.
Thứ hai là khả năng xây dựng các mối quan hệ tin cậy. Nhờ vào việc quan sát được
các bài viết, đánh giá của các thành viên trong mạng xã hội, một tổ chức có thể nắm
bắt được nhu cầu và đánh giá của khách hàng về các sản phẩm hay dịch vụ mà họ
cung cấp. Hơn thế là khi họ có những phản hồi tích cực đối với khách hàng, từ đó xây
Page 6
dựng một mối quan hệ “ảo” với khách hàng trong khi có thể mang lại một niềm tin
“thực”. Không quá tốn kém như những hệ thống chăm sóc khách hàng lớn mà mang
lại hiệu quả cũng không hề nhỏ, đó chính là lợi thế của mạng xã hội.
Hay đối với những cá nhân, nhờ việc đọc được những bài viết phần nào mang tính
chất riêng tư, tâm sự của bè, hay con cái, họ có thể có được những hiểu biết rõ ràng
hơn về bè, con cái của mình, thấy được vấn đề mà người kia đang gặp phải, từ đó
giúp họ giải quyết vấn đề dễ dàng hơn. Bởi nghiên cứu cho thấy, giới trẻ đang có xu
hướng kể ra những phức tạp cá nhân trên blog, mạng xã hội dễ dàng hơn là nói
chuyện trực tiếp với các bậc phụ huynh, hay cả với bè. Khi ấy niềm tin trong mối
quan hệ cũng được nâng lên đáng kể.
Thứ ba, việc tạo lập các mối quan hệ trong mạng xã hội trở nên dễ dàng hơn bao giờ
hết. Thử tưởng tượng trong mạng xã hội nào đó, người dùng có một vài người , những
người ấy lại có nhiều bè khác, cứ như vậy. Nhờ vào mạng xã hội, người dùng ban đầu
có thể thiết lập một mối quan hệ với bất cứ ai, đơn giản chỉ khởi đầu bằng việc gửi đi
một lời nhắn đề nghị được kết . Sau khi được chấp nhận bởi phía bên kia, việc cần làm
để gìn giữ mối quan hệ đó đó là cố gắng cân bằng giữa việc cho đi và nhận lại. Việc
này ở trên một mạng xã hội tỏ ra đơn giản hơn so với việc duy trì mối quan hệ trong
xã hội bình thường, bởi cho đi và nhận về trong mạng xã hội nhiều khi chỉ nằm ở mức
có những bình luận trong những bài viết của bè.
Những ưu điểm mà mạng xã hội mang lại như đã kể trên là rất to lớn, tuy vậy cũng
cần phải chỉ ra một số mặt hạn chế của mạng xã hội.
Vấn đề đầu tiên mà mạng xã hội gặp phải là vấn đề về thông tin cá nhân của người
dùng Error: Reference source not found. Khi đã kết nối vào mạng xã hội, có bè trên
đó đồng nghĩa với việc người dùng cũng phải đối mặt với nguy cơ bị lợi dụng các
thông tin (cá nhân) đăng tải lên đó. Với những thông tin như vậy, những kẻ có ý đồ
không tốt có thể tìm hiểu nhiều thứ khác hơn về người dùng đó. Điều đó có thể làm
ảnh hưởng tới lợi ích cá nhân của người dùng đó ngay trong thời điểm hiện tại cũng
như tương lai. Biết đâu một bức ảnh xưa cũ có thể được lôi ra để làm hại tới thanh
danh của người dùng đó về sau này???
Page 7
Vấn đề thứ hai nằm ở chính cơ chế vận hành của các mạng xã hội. Mạng xã hội cũng
như mọi trang web khác, đều phải giải quyết các vấn đề liên quan tới bảo mật thông
tin. Thêm vào đó, các trang mạng xã hội còn gặp phải một số vấn đề riêng ví dụ như
tình trạng nhắn tin rác làm phiền những thành viên tham gia, sử dụng những công cụ
tự viết. Vấn đề này xuất hiện khá nhiều trên các phương tiện thông tin đại chúng gần
đây, có thể lấy ví dụ về vài sự cố các tài khoản mạng xã hội của những người nổi tiếng
bị hacker kiểm soát, những thông tin nhạy cảm được tung ra …
Một điểm nữa cần nói tới trong mặt hạn chế của mạng xã hội là việc tiêu tốn thời gian
sử dụng. Việc tham gia một mạng xã hội, kiểm tra các thay đổi gần đây từ bè, cập
nhật những thay đổi, thông tin cho chính mình nhiều khi làm mất thời gian của người
tham gia. Tất nhiên điều này còn tùy thuộc vào cách từng người phân phối thời gian
của mình cho việc “online” trên các mạng xã hội mà họ tham gia. Tuy vậy theo những
phân tích gần đây thì có tình trạng khá nhiều người trẻ bị hội chứng “nghiện” khi tham
gia mạng xã hội. Nếu tình trạng này xảy ra ở diện rộng thì sẽ có rất nhiều hiệu ứng
không tốt kèm theo.
Như vậy, cũng như những dịch vụ khác triển khai và khai thác trên nền Internet, mạng
xã hội cũng thể hiện được những ưu và nhược điểm nhất định. Nhược điểm của mạng
xã hội phần lớn kế thừa từ những nhược điểm vốn có của các dịch vụ nền web, nhưng
những ưu điểm của dịch vụ này lại mang tính chất đột phá so với các cách thức truyền
thông cộng tác truyền thống. Như trong một cuốn sách với tựa đề Groundswell của
nhà xuất bản Forrester Research ra đời năm 2008, mạng xã hội và tác động của nó đã
được mô tả với thuật ngữ “groundswell”, tạm hiểu là: “một bước tiến tự nhiên của
loài người khi sử dụng các công cụ trên mạng để kết nối, tích lũy kiến thức, lấy những
gì họ cần – thông tin, hỗ trợ, các ý tưởng, các sản phẩm hay khả năng thương lượng
với cộng đồng”
1
.Và với những tiềm năng hiện tại mà mạng xã hội mang lại (xem
Bảng 1 ), việc tham gia, phân tích và tận dụng những điểm mạnh mà mạng xã hội
mang lại là cần thiết.
1
Page 8
Bảng 1 : Tiềm năng đối với mạng xã hội thông qua vài con số Error: Reference
source not found
Thống kê nhỏ về mạng xã hội
- 80% số người sử dụng Internet đã từng dùng các tiện ích của các
mạng xã hội khác nhau
- Hiện tồn tại khoảng 500 mạng xã hội trên thế giới và hàng nghìn
trang web có chức năng như một mạng xã hội
- Dịch vụ mạng xã hội có tốc độ tăng trưởng trung bình 47% mỗi
năm, cao hơn hầu hết các dịch vụ trên nền Internet khác (Facebook là
150% trong năm khủng hoảng 2008 Error: Reference source not found)
- Cứ 11 phút online trên mạng thì người sử dụng lại dành 1 phút cho
blog và các mạng xã hội
- Người sử dụng ngày càng đa dạng về lứa tuổi
- Di động ngày càng đóng vai trò quan trọng. 23% người sử dụng
mạng xã hội ở Anh truy cập web thông qua điện thoại cầm tay
1.3 Một số bài toán đối với Mạng xã hội
Tiềm năng phát triển rất mạnh hiện nay đồng thời cũng đặt ra những bài toán xử lý
thông tin trên mạng xã hội. Các công nghệ tìm kiếm hiện tại nói chung vẫn chỉ dừng
lại ở mức tìm kiếm nội dung trong các bài viết, tin nhắn được đăng tải trên các mạng
xã hội. Trong khi nhu cầu tìm hiểu và phân tích thông tin còn cao và không chỉ ở khả
năng tìm kiếm nội dung thông thường, mà còn ở phương diện thu thập và phân tích
các mối quan hệ, các đặc điểm. Như vậy các lĩnh vực nghiên cứu dựa trên các mạng
xã hội hiện nay cần hơn một công cụ nào đó giúp cho phép thiết lập một sơ đồ quan
hệ và phân tích sơ đồ đó.
Hiện tại cũng có một số phần mềm cho phép phân tích, xử lý các thông tin dựa trên
quan hệ kiểu như trên Error: Reference source not found. Tuy nhiên có thể nhận thấy
rằng, hầu hết những công cụ đó cần phải có một cơ sở dữ liệu đầu vào để tạo ra đồ thị
quan hệ, thông thường là từ một kiểu file cơ sở dữ liệu như CSV, XML … từ đó mới
bắt đầu thực thi các phân tích liên quan tới đồ thị quan hệ đó. Việc thu thập các nút,
quan hệ giữa các nút hay các thuộc tính khác thường không được định nghĩa mà có
thể nhờ một phần mềm khác, hay cũng có thể do người dùng trực tiếp đưa vào. Cách
Page 9
thức này hạn chế ở điểm sẽ khó nắm bắt được các thay đổi trên mạng xã hội mang
tính chất “thời gian thực” (tiếng Anh: realtime).Với API của twitter mà trong bài thu
hoạch này tạo các bước thu thập dữ liệu từ một quan hệ để làm cơ sở cho tính toán các
mối quan hệ xã hội
Page 10
CHƯƠNG 3: XÂY DỰNG MẠNG TRI THỨC CHO MẠNG XÃ HỘI
Về cơ bản, một mạng xã hội sẽ cho phép người dùng tạo ra cho mình một “profile”
Error: Reference source not found (tạm hiểu là một trang thông tin cá nhân). Ở trang
cá nhân đó, người dùng có khả năng tùy chỉnh về giao diện, các bài viết, các thành
phần theo sở thích cá nhân. Họ cũng có thể đăng tải hình ảnh đại diện (tiếng Anh:
avatar), hoặc tạo ra những album ảnh cá nhân để chia sẻ cùng mọi người. Một cơ chế
quan trọng nữa của mỗi mạng xã hội là bè – friends. Cơ chế kết trong các mạng xã
hội thường là khi muốn kết với ai đó, người dùng phải được người kia chấp nhận lời
mời. Một vài mạng xã hội có một cơ chế khác là Favorites (tạm hiểu: các thông tin ưa
thích) giúp cho họ có thể theo dõi một số hoạt động của người khác mà không cần
phải có quan hệ bè với người kia. Do vậy các mạng xã hội cũng phải cung cấp thêm
các tính năng cơ bản cho việc xác định quyền hạn đối với người xem, bè. Cơ chế này
đơn giản nhất là cho phép hay không cho phép những người chưa có kết nối bè xem
các thông tin có trên trang cá nhân, hay chặn một số người ác ý xuất hiện trên mạng
xã hội.
Đó là cấu trúc cơ bản của một mạng xã hội, ngoài ra các mạng xã hội có thể cung cấp
thêm các tính năng khác giúp làm cho người dùng thấy thoải mái nhất khi tham gia.
Phổ biến trong các tính năng kiểu như vậy là khả năng tham gia mạng xã hội sử dụng
OpenID Error: Reference source not found, hay chia sẻ các video clips từ các mạng
xã hội khác (Youtube, Flickr …), và rất mới mẻ nhưng cũng không kém phần quan
trọng là khả năng truy cập cho các thiết bị di động. Số lượng người sử dụng các thiết
bị di động hỗ trợ khả năng duyệt web ngày càng tăng làm cho việc quan tâm tới khả
năng tương thích với các thiết bị di động vốn hạn chế hơn về tính năng trở nên cần
thiết hơn bao giờ hết.
Page 11
3.1 Mạng xã hội Twitter
Các mạng xã hội ở Việt Nam cũng đang ở giai đoạn phát triển khá mạnh. Các nhà
cung cấp dịch vụ đang đẩy mạnh việc tạo ra những mạng xã hội của riêng mình, mang
phong cách thuần Việt hơn, hướng đến lớp người dùng trong nước. Tuy vậy có một
dịch vụ đã phát triển được khá lâu và hiện vẫn đang là mạng xã hội có số lượng người
dùng lớn nhất Việt Nam, đó là Twitter.
Ra đời vào năm 2006 và mau chóng trở thành một trào lưu trong cộng đồng sử dụng
Tại Mỹ và lan sang cộng đồng sử dụng internet tai Việt Nam, Với các tính năng giúp
chia sẻ thông tin khá thú vị, đồng thời rất dễ sử dụng, Twittergiúp cho mọi người đều
có thể đến với thế giới mạng xã hội một cách dễ dàng, từ giới trẻ năng động, cho tới
các bậc phụ huynh … Cùng với đó, cơ chế liên lạc rất mở rộng của Twitter cũng giúp
cho mạng xã hội này thu hút thêm được một số lượng đông đảo những nhà nghiên cứu
lịch sử, chính trị, những ca sĩ, diễn viên nhằm mở rộng quan hệ với công chúng. Mạng
xã hội này từ đó đã trở thành một sân chơi chung dành cho rất nhiều lớp người Việt
đến từ nhiều ngành nghề khác nhau.
Cũng như các mạng xã hội khác, Twitterđược tạo thành từ một mạng các cá thể được
liên kết với nhau như một đồ thị vô hướng. Như vậy, như đã đề cập ở trên, các công
cụ tìm kiếm hiện nay chưa thể làm việc với quan hệ đồ thị dạng này của các mạng xã
hội, cho nên đây sẽ là một lĩnh vực cần và còn được khai thác trong nay mai. Các API
của twiter trong khóa luận này sẽ nắm phần nào nhiệm vụ khai thác này.
Từng trang cá nhân trong Twitter được phát triển như một trang thông tin cho một cá
nhân (hay một nhóm người, tùy vào mục đích sử dụng). Trong đó có các thành phần
cơ bản như blog (nhật ký ảo), friend list (danh sách bè), blast, list (danh sách sở
thích), comment (bình luận), tag, sms (nhắn tin)…
Blog là thành phần trong một trang cá nhân Twitter. Đây là nơi cho người dùng viết
lên những suy nghĩ, cảm xúc … về mọi thứ diễn ra xung quanh, nên nó còn được gọi
là nhật ký ảo. Mỗi một bài viết như vậy còn được gọi là một entry. bè của người viết
sẽ vào xem những bài viết như vậy, để lại những lời bình luận, đánh giá nếu muốn.
Page 12
Friend list chính là điểm cấu thành mạng xã hội Twitter. Friend list chỉ ra mối quan
hệ giữa các cá thể trong mạng xã hội Twitter, ở đây là mối quan hệ bè. Nhờ có danh
sách bè này mà ta có thể biết được tất cả bè của một người. Việc thăm danh sách bè
của một người để tìm ra bè của người đó, rồi cứ tiếp tục thăm dần dần tới những
người đó để lại tiếp tục tìm ra bè của họ sẽ giúp ta lan tỏa dần trong đồ thị mạng xã
hội Twitter. Việc này không khác gì với việc làm sao để thăm tất cả các nút trong một
đồ thị vô hướng, vấn đề chỉ còn là thuật toán và cách thức tiến hành việc thăm sao cho
công sức bỏ ra là nhỏ nhất.
Blast cũng là một thành phần khá thú vị trong Twitter. Blast có thể là một lời giới
thiệu, mẩu tin nhỏ, một đường siêu liên kết, hay đơn giản là suy nghĩ trong đầu người
viết tại thời điểm đó. Blast được đặt ở vị trí đầu của trang cá nhân Twitter, điều này
giúp cho blast trở thành thứ được để ý đầu tiên khi ghé thăm một trang cá nhân. Nếu
một trang cá nhân Twitterđược ví như một cuốn nhật ký, một cuốn sách thì có lẽ blast
sẽ đóng vai trò như lời mở đầu, lời đề tựa cho cuốn nhật ký, cho cuốn sách đó.
Một thành phần khác trong Twittercũng rất thu hút đối với những người tham gia
mạng xã hội này là hệ thống các comment hay còn gọi là bình luận. Với hệ thống này,
những người tham gia có thể trao đổi những dòng tin ngắn với nhau, về một chủ để
nào đó, về vấn đề trong bài viết của người viết … Với hệ thống này, những người có
thể thể hiện sự quan tâm đến nhau, nhờ đó duy trì mối quan hệ bè.
Ngoài ra Twittercòn có các thành phần khác nhằm giúp người dùng tìm ra những
người có cùng sở thích với mình như Lists. Hay Tag cloud giúp tạo ra các từ khóa
(tiếng Anh: keyword) nhằm hệ thống hóa các bài viết mà người dùng đã soạn.
Với những đặc điểm như trên, Twitterđã và đang là dịch vụ mạng xã hội được sử dụng
nhiều nhất, và có người dùng gắn bó nhất tại Việt Nam. Điều đó lý giải được tại sao
người dùng Việt Nam quyết bám trụ lại mạng xã hội này, thậm chí có những động thái
yêu cầu nhà cung cấp tiếp tục duy trì và phát triển dịch vụ này khi gần đây có nhiều
thông tin cho rằng mạng xã hội Twitterchuẩn bị đóng cửa. Do vậy, trên thực tế, việc
phân tích và tìm kiếm thông tin trên mạng xã hội này là rất đáng giá.
Page 13
3.2 Xây dựng mạng tri thức cho mạng xã hội Twitter
Để thực hiện được những bài toán đặt ra trên cơ sở quan hệ đồ thị của WAVE, cần
phải tạo ra được một đồ thị quan hệ trong WAVE, hay còn gọi là một KNOWLEGE
NETWORK – Mạng tri thức. Đối với các bài toán phân tích mạng xã hội, cần phải
thực thi việc tạo ra KNOWLEGE NETWORK tương ứng với đồ thị quan hệ trong
mạng xã hội đó. Tức là mỗi cá thể (mỗi cá nhân hiện diện trên mạng xã hội) sẽ tương
ứng với một nút trong KNOWLEGE NETWORK, quan hệ giữa các cá thể là đường
liên kết giữa các nút trong KNOWLEGE NETWORK.
3.3 API RESTful and OAuth
Năm 2010 được nhớ đến bởi một số giai đoạn chuyển đổi trong đó twitter đã
lớn mạnh phát triển việc xác thực http cơ bản bằng oauth ,tài liệu hướng dẫn được cải
thiện và các API ngày càng được phổ biến hơn và càng được phát triể mạnh hơn .Các
api trong phần này xoay quanh các api đồ thị nhận được bè và những người theo của
một người sử dụng, các API để có được thông tin người dùng mở rộng(Tên, địa điểm,
tweet mới nhất, vv) cho một danh sách các người sử dụng, và các API để nhận dữ liệu
tweet Chúng ta đơn giản xây dựng yêu cầu trong cùng một cách thức mà URL được
ráp lại với nhau trong tài liệu trực tuyến của Twitter Ví dụ, một yêu cầu từ các thiết bị
đầu cuối thông tin người dùng lại trieves chỉ đơn giản là liên quan đến việc cử một
yêu cầu người dùng hiển thị giá trị là 1 curlcommand, như sau:
$ curl ' />curl là một công cụ tiện dụng có thể được sử dụng để truyền dữ liệu tới / từ một máy
chủ bằng cách sử dụng một loạt các giao thức, và nó đặc biệt hữu ích cho việc làm cho
HTTP yêu cầu từ một thiết bị đầu cuối. Nó đi kèm tiêu chuẩn và thường là trong
PATH trên hầu hết các hệ thống nix, nhưng người dùng Windows có thể cần phải tải
về và cấu hình nó. User_ID có thể được chấp nhận thay vì Screen_name
Lấy thông tin mở rộng của twitter
import twitter
import json
Page 14
screen_name = 'timoreilly'
t = twitter.Twitter(domain='api.twitter.com', api_version='1')
response = t.users.show(screen_name=screen_name)
print json.dumps(response, sort_keys=True, indent=4)
Vì vậy OAuth cung cấp một cách để cho phép một ứng dụng để truy cập dữ liệu đã
được lưu trữ trong ứng dụng khác mà không cần phải chia sẻ tên người dùng và mật
khẩu của . IETF OAuth 2.0 Protocolspec là gần như không đáng sợ như nó có thể , và
sẽ mất một ít thời gian để lướt qua nó bởi vì OAuth ở khắp mọi nơi, đặc biệt là trong
bối cảnh mạng xã hội
3.4 Machine Thu Thập dữ liệu
Về nguyên tắc, lấy dữ liệu Twitter là đơn giản: tạo một yêu cầu, lưu trữ các phản
ứng,và lặp lại khi cần thiết. Nhưng tất cả các loại công cụ thế giới thực và những
pesky API tỷ lệ giới hạn. nó không quákhó khăn để xử lý các vấn đề như vậy, miễn là
làm một chút ve phía trước lập kế hoạch và dự đoánnhững điều có thể (và sẽ) đi sai.
Page 15
Khi thực hiện một chương trình trong thời gian dài điều này sẽ làm tốn nhiều tỉ lệ gới
hạn.việc viết mã robust là đặc biệt quan trọng . Ta cần phải nắm giữ các điều kiện đặc
biệt có thể xảy ra .để thực hiện cách khắc phục tình hình tốt nhất và sự kiện tốt nhất là
không đủ lưu các trạng thái và bõ các chỉ dẫn làm thế nào để bỏ đi. Nói cách khác, khi
viết dữ liệu thu hoạch mã cho một nền tảng như Twitter, phải thừa nhận rằng nó sẽ
ném bóng đường cong ở . Có sẽ có điều kiện không điển hình sẽ phải xử lý, và chúng
thường xuyên hơn mức hơn
ngoại lệ
Code phát triển là semi-rugged trong đó nó đề với những điều phổ biến nhất mà có
thể đi sai và khuôn mẫu để các có thể dễ dàng mở rộng nó để xử lý mới trường hợp
nếu và khi họ phát sinh. Điều đó nói rằng, có hai lỗi HTTP cụ thể rằng đang rất có
khả năng gặp phải khi thu hoạch một lượng khiêm tốn thậm chí dữ liệu twitter: một lỗi
401 (không có thẩm quyền) và một lỗi 503 (trên năng lực). xảy ra khi cố gắng truy
cập vào dữ liệu mà người dùng đã bảo vệ, trong khi sau đó là về cơ bản không thể
đoán trước
Bất cứ khi nào Twitter trả về lỗi HTTP, twittermodule trả một
TwitterHTTPErrorexception, mà có thể được xử lý như thế nào khác Python
exception, với try/exceptblock. Ví dụ 4-2illustrates một khối tối thiểu ID một số
người ID và xử lý một số các điều kiện đặc biệt phổ biến hơn
Sử dụng OAuth để xác thực và lấy một số dữ liệu friend
(friends_followers__get_friends.py)
import sys
import time
import cPickle
import twitter
consumer_key = ''
consumer_secret = ''
Page 16
SCREEN_NAME = sys.argv[1]
friends_limit = 10000
(oauth_token, oauth_token_secret) = oauth_dance('MiningTheSocialWeb',
consumer_key, consumer_secret)
t = twitter.Twitter(domain='api.twitter.com', api_version='1',
auth=twitter.oauth.OAuth(oauth_token, oauth_token_secret,
consumer_key, consumer_secret))
ids = []
wait_period = 2 # secs
cursor = -1
while cursor != 0:
if wait_period > 3600: # 1 hour
print 'Too many retries. Saving partial data to disk and exiting'
f = file('%s.friend_ids' % str(cursor), 'wb')
cPickle.dump(ids, f)
f.close()
exit()
try:
response = t.friends.ids(screen_name=SCREEN_NAME, cursor=cursor)
ids.extend(response['ids'])
wait_period = 2
except twitter.api.TwitterHTTPError, e:
Page 17
if e.e.code == 401:
print 'Encountered 401 Error (Not Authorized)'
print 'User %s is protecting their tweets' % (SCREEN_NAME, )
elif e.e.code in (502, 503):
print 'Encountered %i Error. Trying again in %i seconds' % (e.e.code,
wait_period)
time.sleep(wait_period)
wait_period *= 1.5
continue
elif t.account.rate_limit_status()['remaining_hits'] == 0:
status = t.account.rate_limit_status()
now = time.time() # UTC
when_rate_limit_resets = status['reset_time_in_seconds'] # UTC
sleep_time = when_rate_limit_resets - now
print 'Rate limit reached. Trying again in %i seconds' % (sleep_time,
)
time.sleep(sleep_time)
continue
cursor = response['next_cursor']
print 'Fetched %i ids for %s' % (len(ids), SCREEN_NAME)
if len(ids) >= friends_limit:
A Lean, Mean Data-Collecting Machine | 89
Page 18
Break
print ids
Thetwitter.OAuth module cung cấp read_token_file và write_token_fileconven-ience
chức năng mà có thể được sử dụng để lưu trữ và truy xuất OAuth code thông báo của
và OAuth bí mật mã thông báo, do đó không cần phải nhập thủ công trong một mã
PIN để xác thực mỗi thời điểm
3.5 Một cấu trúc dữ liệu server
Như chúng ta đã đã quan sát, lập kế hoạch trước quan trọng là khi muốn thực hiện
một
có khả năng dài chạy chương trình để xuống dữ liệu từ các trang Web, bởi vì rất nhiều
của
những thứ có thể đi sai. Nhưng những gì làm với tất cả các dữ liệu đó một khi nhận
được nó? có thể ban đầu bị cám dỗ để chỉ cần lưu nó vào đĩa. Trong tình hình chỉ xem
xét, mà có thể dẫn đến một cấu trúc thư mục tương tự như sau
screen_name1/
friend_ids.json
follower_ids.json
user_info.json
screen_name2/
Điều này có vẻ khá hợp lý cho đến khi thu thập tất cả bè/người theo cho một rất
người sử dụng phổ biến-sau đó, tùy thuộc vào nền tảng của , có thể phải đối mặt với
một thư mục chứa hàng triệu của thư mục con đó là tương đối không sử dụng được
bởi vì có thể không duyệt nó rất dễ dàng (nếu ở tất cả) trong một nhà ga. Lưu tất cả
các thông tin này vào đĩa có thể yêu cầu cũng
rằng duy trì một đăng ký của một số loại có giữ theo dõi của tất cả các màn hình tên,
vì
thời gian cần thiết để tạo ra một thư mục listing (trong các trường hợp mà cần một)
for
Page 19
triệu tập tin có thể không mang lại một hồ sơ hiệu suất mong muốn. Nếu các ứng dụng
có sử dụng các dữ liệu sau đó trở thành luồng, có thể kết thúc với nhiều nhà văn cần
để truy cập vào 92 | Chương 4: Twitter: bè, những người theo và Setwise hoạt động
cùng một tập tin cùng một lúc, vì vậy sẽ phải bắt đầu giao dịch với tập tin khóa và
như vậy
những điều. Mà có lẽ không phải là một nơi muốn đi. Tất cả chúng ta thực sự cần
trong trường hợp này là một hệ thống giúp trivially dễ dàng lưu trữ cơ bản chìa
khóa/cặp giá trị và một đơn giản chính vi mã hóa lược đồ-một cái gì đó như một đĩa
sao từ điển sẽ là một khởi đầu tốt. Điều này
tiếp theo đoạn chứng tỏ xây dựng một khóa bởi concatenating ID, de-limiter, và dữ
liệu cấu trúc tên người dùng
s = {}
s["screen_name1$friend_ids"] = [1,2,3, ]
s["screen_name1$friend_ids"] # returns [1,2,3, ]
Nhưng nó sẽ không được tốt nếu bản đồ tự động có thể tính toán thiết lập hoạt động
do đó chỉ có thể nói với nó để làm một cái gì đó như
s.intersection("screen_name1$friend_ids", "screen_name1$follower_ids")
để tự động tính toán " bè lẫn nhau" cho một Twitterer (ví dụ, để tìm ra đó của bè của
họ đang theo dõi chúng trở lại)? Vâng, đó là một dự án mã nguồn mở được gọi là
Redisthat cung cấp exactlythat loại khả năng. Redis là tầm thường để cài đặt,
blazingly nhanh (viết bằng C), quy mô tốt,tích cực được duy trì, và có một khách hàng
Python tuyệt vời với đi kèm với tài liệu hướng dẫn có sẵn. Tham gia Redis cho một ổ
đĩa thử nghiệm đơn giản như cài đặt itand bắt đầu lên máy chủ.(Windows người dùng
có thể lưu bản thân một số đau đầu bởi grabbing một binarythat của bảo trì bởi
servicestack.net.) Sau đó, chỉ cần chạy easy_install redisto có được một khách hàng
Python đẹp mà cung cấp truy cập tầm thường để mọi điều nó đã cung cấp. Ví dụ, đoạn
trước đó dịch để Redis sau
Code:
Page 20
import redis
r = redis.Redis(host='localhost', port=6379, db=0) # Default params
[ r.sadd("screen_name1$friend_ids", i) for i in [1, 2, 3, ] ]
r.smembers("screen_name1$friend_ids") # Returns [1, 2, 3, ]
Lưu ý rằng trong khi saddand smembersare tập dựa trên hoạt động, Redis bao gồm
hoạt động cụ thể cho các loại hình khác của cấu trúc dữ liệu, chẳng hạn như bộ, danh
sách, và hashes. Thiết lập hoạt động bật ra quan tâm đặc biệt vì họ cung cấp cho câu
trả lời cho nhiều người trong số các câu hỏi đặt ra ở đầu của chương này. Nó là đáng
giá để có một chút thời gian để xem xét tài liệu hướng dẫn cho khách hàng Redis
Python để có được một tốt hơn ap-preciation của tất cả nó có thể làm. Nhớ lại rằng
chỉ đơn giản là có thể thực hiện một lệnh như pydoc redis.Redisto nhanh chóng duyệt
tài liệu từ một terminal
3.6 Tập con
Các hoạt động phổ biến nhất thiết lập có khả năng sẽ gặp là union,và sự khác biệt
hoạt động. Nhớ lại rằng sự khác biệt giữa một thiết lập và danh sách là một tập là có
thứ tự và có chứa các thành viên chỉ duy nhất, trong khi danh sách đặt hàng và có thể
chứa thành viên trùng lặp. Theo phiên bản 2.6, Python cung cấp được xây dựng trong
hỗ trợ cho bộ thông qua cấu trúc setdata. một số ví dụ chung đặt opera-tions cho một
discourse của vũ trụ trivially nhỏ liên quan đến bè và những người theo
Friends = {Abe, Bob}, Followers = {Bob, Carol}
Sample set operations for Friends and Followers
Operation Result Comment
Friends ∪Followers Abe, Bob, Carol Someone’s overall network
Friends ∩Followers Bob Someone’s mutual friends
Friends – Followers Abe People a person is following, but who are
not following that personback
Page 21
Followers – Friends Carol P eople who are following someone but
are not being followed back
Như đã đề cập đến Redis cung cấp hoạt động cho máy tính phổ biến tập hoạt động.
Một vài trong số những người phù hợp nhất cho công việc ở bàn tay sắp tới bao gồm
Smembers : Trả về tất cả các thành viên của bộ
Scard: Trả về cardinality một tập (số thành viên trong tập)
Sinter : Tính giao cho danh sách của bộ
Sdiff: Tính sự khác biệt cho một danh sách các bộ
Mget:Trả về một danh sách các chuỗi giá trị cho một danh sách các khóa
Mset: lưu trữ một danh sách các chuỗi giá trị đối với một danh sách các khóa
Sad: Thêm một mục vào một bộ (và tạo ra các thiết lập nếu nó không tồn tại)
Keys : Trả về một danh sách các khóa phù hợp với một mô hình like_regex
3.7 Souping Up the Machine với Friend /Follower Metrics
Redis sẽ phục vụ tốt yêu cầu của hiệu quả xử lý và phân tích rộng lớn khối lượng dữ
liệu Twitter cho một số loại truy vấn. Điều chỉnh một số bổ sung logic để nhà dữ liệu
trong Redis yêu cầu chỉ một thay đổi đơn giản, Cập Nhật mà tính một số số liệu thống
kê cơ bản bè/đi theo. Native functions trong Redis được sử dụng để tính toán các hoạt
động thiết lập
Thu hoạch, lưu trữ, và tính toán thống kê về bè và những người theo
(friends_followers__friend_follower_symmetry.py)
import sys
import locale
import time
import functools
Page 22
import twitter
import redis
from twitter__login import login
# A template-like function for maximizing code reuse,
# which is essentially a wrapper around makeTwitterRequest
# with some additional logic in place for interfacing with
# Redis
from twitter__util import _getFriendsOrFollowersUsingFunc
# Creates a consistent key value for a user given a screen name
from twitter__util import getRedisIdByScreenName
SCREEN_NAME = sys.argv[1]
MAXINT = sys.maxint
# For nice number formatting
locale.setlocale(locale.LC_ALL, '')
# You may need to setup your OAuth settings in twitter__login.py
t = login()
r = redis.Redis()
# Some wrappers around _getFriendsOrFollowersUsingFunc
# that bind the first two arguments
getFriends = functools.partial(_getFriendsOrFollowersUsingFunc, t.friends.ids,
'friend_ids', t, r)
getFollowers = functools.partial(_getFriendsOrFollowersUsingFunc,
Page 23
t.followers.ids, 'follower_ids', t, r)
screen_name = SCREEN_NAME
# get the data
print >> sys.stderr, 'Getting friends for %s ' % (screen_name, )
getFriends(screen_name, limit=MAXINT)
print >> sys.stderr, 'Getting followers for %s ' % (screen_name, )
getFollowers(screen_name, limit=MAXINT)
# use redis to compute the numbers
n_friends = r.scard(getRedisIdByScreenName(screen_name, 'friend_ids'))
n_followers = r.scard(getRedisIdByScreenName(screen_name, 'follower_ids'))
n_friends_diff_followers = r.sdiffstore('temp',
[getRedisIdByScreenName(screen_name,'friend_ids'),
getRedisIdByScreenName(screen_name,'follower_ids')])
r.delete('temp')
n_followers_diff_friends = r.sdiffstore('temp',
[getRedisIdByScreenName(screen_name,'follower_ids'),
getRedisIdByScreenName(screen_name,'friend_ids')])
r.delete('temp')
n_friends_inter_followers = r.sinterstore('temp',
[getRedisIdByScreenName(screen_name, 'follower_ids'),
getRedisIdByScreenName(screen_name, 'friend_ids')])
r.delete('temp')
print '%s is following %s' % (screen_name, locale.format('%d', n_friends, True))
Page 24
print '%s is being followed by %s' % (screen_name, locale.format('%d',
n_followers, True))
print '%s of %s are not following %s back' %
(locale.format('%d',n_friends_diff_followers, True), locale.format('%d', n_friends,
True),screen_name)
print '%s of %s are not being followed back by %s' %
(locale.format('%d',n_followers_diff_friends, True), locale.format('%d', n_followers,
True),A Lean, Mean Data-Collecting Machine | 97screen_name)
print '%s has %s mutual friends' \% (screen_name, locale.format('%d',
n_friends_inter_followers, True))
Giải quyết thông tin người dùng cơ bản như màn hình tên từ IDS
(friends_import sys
import json
import redis
from twitter__login import login
# A makeTwitterRequest call through to the /users/lookup
# resource, which accepts a comma separated list of up
# to 100 screen names. Details are fairly uninteresting.
# See also />from twitter__util import getUserInfo
if __name__ == "__main__":
screen_names = sys.argv[1:]
t = login()
Page 25