Break code into modules.
Use ocamlbuild command to build cheesebot.
This commit is contained in:
		
							parent
							
								
									7732fdf877
								
							
						
					
					
						commit
						ff69981a5c
					
				
					 7 changed files with 95 additions and 47 deletions
				
			
		
							
								
								
									
										2
									
								
								.gitignore
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.gitignore
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -13,3 +13,5 @@ cabal-dev
 | 
			
		|||
# OCaml
 | 
			
		||||
*.cmo
 | 
			
		||||
*.cmi
 | 
			
		||||
_build
 | 
			
		||||
*.native
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										1
									
								
								ocaml/_tags
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								ocaml/_tags
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1 @@
 | 
			
		|||
true: package(ssl,netclient,netstring,equeue-ssl)
 | 
			
		||||
| 
						 | 
				
			
			@ -1,4 +0,0 @@
 | 
			
		|||
ocamlfind ocamlc -o cheesebot -linkpkg \
 | 
			
		||||
  -package netclient,ssl,equeue-ssl,netstring \
 | 
			
		||||
  str.cma \
 | 
			
		||||
  main.ml
 | 
			
		||||
| 
						 | 
				
			
			@ -1,43 +0,0 @@
 | 
			
		|||
open Str
 | 
			
		||||
open Ssl
 | 
			
		||||
open Http_client.Convenience
 | 
			
		||||
open Https_client;;
 | 
			
		||||
 | 
			
		||||
Ssl.init();
 | 
			
		||||
Http_client.Convenience.configure_pipeline
 | 
			
		||||
(fun p ->
 | 
			
		||||
  let ctx = Ssl.create_context Ssl.TLSv1 Ssl.Client_context in
 | 
			
		||||
  let tct = Https_client.https_transport_channel_type ctx in
 | 
			
		||||
  p # configure_transport Http_client.https_cb_id tct
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
(* Regexp required here *)
 | 
			
		||||
let is_youtube_url url =
 | 
			
		||||
  let regexp = Str.regexp "\\(https?\\://\\)?\\(www\\.\\)?\\(youtube\\.com\\)\\|\\(youtu\\.be\\)/.+" in
 | 
			
		||||
  Str.string_match regexp url 0
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
let get_body url =
 | 
			
		||||
  try Http_client.Convenience.http_get url with
 | 
			
		||||
  | Http_client.Http_error e -> "http error /o\\"
 | 
			
		||||
  | Failure f -> "http fail lol"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
(* Maybe have a list of functions and
 | 
			
		||||
 * iter on all the items in the list *)
 | 
			
		||||
let evaluate str =
 | 
			
		||||
  match str with
 | 
			
		||||
  | str when is_youtube_url str -> get_body str
 | 
			
		||||
  | _ -> str;;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
try
 | 
			
		||||
  while true do
 | 
			
		||||
    print_string "> ";
 | 
			
		||||
    let line = read_line () in
 | 
			
		||||
    let answer = evaluate line in
 | 
			
		||||
    print_endline answer
 | 
			
		||||
  done
 | 
			
		||||
with
 | 
			
		||||
  End_of_file -> print_endline "Bye!";;
 | 
			
		||||
							
								
								
									
										50
									
								
								ocaml/shell.ml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								ocaml/shell.ml
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,50 @@
 | 
			
		|||
open Str
 | 
			
		||||
open String
 | 
			
		||||
open Printf
 | 
			
		||||
 | 
			
		||||
(*open SimpleHttp*)
 | 
			
		||||
 | 
			
		||||
open Ssl
 | 
			
		||||
open Http_client.Convenience
 | 
			
		||||
open Https_client
 | 
			
		||||
open Nethtml
 | 
			
		||||
open Netchannels;;
 | 
			
		||||
 | 
			
		||||
Ssl.init();
 | 
			
		||||
Http_client.Convenience.configure_pipeline
 | 
			
		||||
(fun p ->
 | 
			
		||||
  let ctx = Ssl.create_context Ssl.TLSv1 Ssl.Client_context in
 | 
			
		||||
  let tct = Https_client.https_transport_channel_type ctx in
 | 
			
		||||
  p # configure_transport Http_client.https_cb_id tct
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
let is_url url =
 | 
			
		||||
  let regexp = Str.regexp "\\(https?\\://\\)?www\\..+\\..+" in
 | 
			
		||||
  Str.string_match regexp url 0
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
let is_youtube_url url =
 | 
			
		||||
  let regexp = Str.regexp "\\(https?\\://\\)?\\(www\\.\\)?\\(youtube\\.com\\)\\|\\(youtu\\.be\\)/.+" in
 | 
			
		||||
  Str.string_match regexp url 0
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
(* Maybe have a list of functions and
 | 
			
		||||
 * iter on all the items in the list *)
 | 
			
		||||
let evaluate str =
 | 
			
		||||
  match str with
 | 
			
		||||
  | str when is_youtube_url str -> SimpleHttp.get_http_title (SimpleHttp.get_body str); str
 | 
			
		||||
  | str when is_url str -> SimpleHttp.get_http_title (SimpleHttp.get_body str); str
 | 
			
		||||
  | _ -> str
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
let () =
 | 
			
		||||
  try
 | 
			
		||||
    while true do
 | 
			
		||||
      print_string "> ";
 | 
			
		||||
      let line = read_line () in
 | 
			
		||||
      let answer = evaluate line in
 | 
			
		||||
      print_endline answer
 | 
			
		||||
    done
 | 
			
		||||
  with
 | 
			
		||||
    End_of_file -> print_endline "Bye!";;
 | 
			
		||||
							
								
								
									
										1
									
								
								ocaml/shell.native
									
										
									
									
									
										Symbolic link
									
								
							
							
						
						
									
										1
									
								
								ocaml/shell.native
									
										
									
									
									
										Symbolic link
									
								
							| 
						 | 
				
			
			@ -0,0 +1 @@
 | 
			
		|||
/Users/fab/Code/cheesebot/ocaml/_build/shell.native
 | 
			
		||||
							
								
								
									
										41
									
								
								ocaml/simpleHttp.ml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								ocaml/simpleHttp.ml
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,41 @@
 | 
			
		|||
open Str
 | 
			
		||||
open String
 | 
			
		||||
open Printf
 | 
			
		||||
open Ssl
 | 
			
		||||
open Http_client.Convenience
 | 
			
		||||
open Https_client
 | 
			
		||||
open Nethtml
 | 
			
		||||
open Netchannels;;
 | 
			
		||||
 | 
			
		||||
Ssl.init();
 | 
			
		||||
Http_client.Convenience.configure_pipeline
 | 
			
		||||
(fun p ->
 | 
			
		||||
  let ctx = Ssl.create_context Ssl.TLSv1 Ssl.Client_context in
 | 
			
		||||
  let tct = Https_client.https_transport_channel_type ctx in
 | 
			
		||||
  p # configure_transport Http_client.https_cb_id tct
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
let extract_string_value document =
 | 
			
		||||
  match document with
 | 
			
		||||
  | Nethtml.Data(s) -> s
 | 
			
		||||
  | _ -> ""
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
let rec get_title_element document =
 | 
			
		||||
  match document with
 | 
			
		||||
  | Nethtml.Element(e, args, sub) -> Printf.printf "%s: %s" "Element\n" e
 | 
			
		||||
  | Nethtml.Data(s) -> Printf.printf "%s: %s" "Data\n" s
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
let get_http_title body =
 | 
			
		||||
  let ch = new Netchannels.input_string body in
 | 
			
		||||
  let doc = Nethtml.parse ch in
 | 
			
		||||
  get_title_element (List.hd doc)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
(* TODO: Log errors *)
 | 
			
		||||
let get_body url =
 | 
			
		||||
  try Http_client.Convenience.http_get url with
 | 
			
		||||
  | Http_client.Http_error e -> "http error /o\\"
 | 
			
		||||
  | Failure f -> "http fail lol"
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue