- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
open System.Net
open System.Text.RegularExpressions
open System.Text
open System
type userInfo =
{ User : string;
Rating : double;}
let mutable Users = []
(* Заполняем списки юзверей *)
let getUsersInfo s =
let mutable m = Regex.Match(s, @">(?<user>[^<]+)</a></td>\s+<td class=""strength"">[^<]+</td>\s+<td class=""rating""><strong>(?<rating>[^<]+)") //+ Оптимизировать регулярку. (Page 2)
while(m.Success) do
let info = {User = m.Groups.["user"].Value; Rating = m.Groups.["rating"].Value |> double}
Users <- Users @ [info]
m <- m.NextMatch()
(* скачивание страницы по индексу *)
let getSourceForUsers p =
let url = "http://freehabr.ru/people/good/page" + string(p)
let wc = new WebClient();
let s = wc.DownloadString(url);
printfn "Разобрана %i страница" p
getUsersInfo s
(* получить индекс последней страницы *)
let getLastPage =
let wc = new WebClient()
wc.Encoding <- Encoding.UTF8
let s = wc.DownloadString "http://freehabr.ru/people/"
Regex.Match(s,@"(?<=e)\d+(?=/"">п)").Value |> int
let lastPage = getLastPage
let printList a =
a |> List.iter (fun x -> printfn "%s рейтинг - %.2f" x.User x.Rating)
Console.ReadKey() |> ignore
[<EntryPoint>]
let main(args:string[]) =
printfn "Парсер юзерей с положительным (или нулевым) рейтингом"
printfn "%i -- Количество страниц" lastPage
printfn "scan --XX - __ Cбор списка пользователей от первой страницы до XX"
printfn "scan --YY --XX __ Сбор списка пользователей от YY страницы до XX. \nXX не может быть больше, чем максимальное количество страниц в списках юзеров с положительной кармой"
let userInput = Console.ReadLine();
match userInput with
| _ when userInput.StartsWith "scan --" -> let a = Regex.Split(userInput,"--")
let dig = a.[1] |> int
if a.Length = 2 then // для первого варианта
[1 .. dig]
|> List.iter getSourceForUsers
else // для второго
[ dig .. a.[2] |> int ]
|> List.iter getSourceForUsers
printfn "~~~\nЮзеры посчитаны"
| _ -> printfn "Завершение приложения"
exit(1)
printfn "~~~~\nОбработка списка\n~~~~"
printfn "usersGreaterRate --XX __ Показать пользователей,\nу которых рейтинг больше или равен XX"
printfn "usersLessRate --XX __ Показать пользователей,\nу которых рейтинг меньше или равен XX"
printfn "usersWithNamesBegins --String __ Показать пользователей,\nу которых имя начинается со строки String"
let usersOper = Console.ReadLine()
let param = Regex.Split(usersOper," --").[1]
match usersOper with
| _ when usersOper.StartsWith "usersGreaterRate --" -> Users
|> List.filter (fun x -> x.Rating > (param |> double))
|> printList
| _ when usersOper.StartsWith "usersLessRate --" -> Users
|> List.filter (fun x -> x.Rating < (param |> double))
|> printList
| _ when usersOper.StartsWith "usersWithNamesBegins --" -> Users
|> List.filter (fun x -> x.User.StartsWith param)
|> printList
| _ -> printfn "Завершение приложения"
exit(1)
0
Eugene 12.07.2011 13:49 # −1
Где говнокод? Кроме магических строк ничего страшного нет.
guest 12.07.2011 14:12 # +3
Eugene 12.07.2011 15:09 # +2
guest 12.07.2011 15:19 # 0
guest 12.07.2011 14:41 # 0
Nicklasos 12.07.2011 15:00 # 0
Eugene 12.07.2011 15:12 # +3
open System.Net
open System.Text.RegularExpressions
open System.Text
open System
это все же .NET
Nicklasos 12.07.2011 15:35 # +1
guest 12.07.2011 15:51 # +1
guest 15.07.2011 01:51 # −1
guest 12.07.2011 15:24 # +5
guest 12.07.2011 15:26 # +3
чо уж мелочиться
TheHamstertamer 13.07.2011 10:35 # −1
guest 19.07.2011 15:02 # −1
guest 12.07.2011 16:37 # −2
guest 14.07.2011 01:09 # −2
Где говно? *Выполняет призыв КЭП'а. Трах-тибидохХх-тибисдох*
Vasiliy 14.07.2011 08:11 # −1
TheHamstertamer 14.07.2011 08:39 # −1
inkanus-gray 14.07.2011 21:34 # 0
bugmenot 15.07.2011 02:58 # 0
я его 7 лет назад юзал
rat4 14.07.2011 15:36 # −1
Буквой.
Vasiliy 14.07.2011 15:40 # −3
guest 15.07.2011 01:49 # −1