blackstack_commons 0.0.16 → 0.0.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/functions.rb +143 -0
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a6ab4c21a6f6cf0ff81035fa7f09d0be05c113d4
|
4
|
+
data.tar.gz: 31141034849f46b3681e718d854d51b6bca10890
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a455c47b52c54b8d52919b8850593e7e2acb90c5300cb0580fb1e40301357481ac5473bdba81d6a6b302001b5a9f585f277f9248651b4256b89a6277eee470a2
|
7
|
+
data.tar.gz: 94893de40ffbc265b4a4246aa1d23a812ca7336ccea7aecc872ee172c1da97bcf84b4aad169360c9edf992b714b46d16c9d9d11deb87a6436ef8051a525a65c6
|
data/lib/functions.rb
CHANGED
@@ -453,6 +453,7 @@ module BlackStack
|
|
453
453
|
uri.query = URI.encode_www_form(params)
|
454
454
|
Net::HTTP.start(uri.host, uri.port, :use_ssl => uri.scheme == 'https', :verify_mode => ssl_verify_mode) do |http|
|
455
455
|
req = Net::HTTP::Get.new uri
|
456
|
+
#req.body = body if !body.nil?
|
456
457
|
res = http.request req
|
457
458
|
case res
|
458
459
|
when Net::HTTPSuccess then res
|
@@ -470,6 +471,7 @@ module BlackStack
|
|
470
471
|
req = Net::HTTP::Post.new(uri)
|
471
472
|
req['Content-Type'] = 'application/json'
|
472
473
|
req.set_form_data(params)
|
474
|
+
#req.body = body if !body.nil?
|
473
475
|
res = http.request req
|
474
476
|
case res
|
475
477
|
when Net::HTTPSuccess then res
|
@@ -552,6 +554,147 @@ module BlackStack
|
|
552
554
|
def self.file_age(filename)
|
553
555
|
(Time.now - File.ctime(filename))/(24*3600)
|
554
556
|
end
|
557
|
+
|
558
|
+
|
559
|
+
# TODO: Is not guaranteed this function works with 100% of the redirect-urls. This problem requires analysis and development of a general purpose algorith
|
560
|
+
# This function gets the final url from a redirect url.
|
561
|
+
# Not all the redirect-urls works the same way.
|
562
|
+
# Below are 3 examples. Each one works with 1 of the 2 strategies applied by this funcion.
|
563
|
+
# => url = "https://www.google.com.ar/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0CB0QFjAAahUKEwjCg8zMsNvGAhXMMj4KHWBfA50&url=https%3A%2F%2Fwww.linkedin.com%2Fpub%2Fdavid-bell%2F5%2F76a%2F12&ei=IGalVcLzFMzl-AHgvo3oCQ&usg=AFQjCNGMbF2vRIOWsRjF-bjjoG6Nl1wg_g&sig2=ZP6ZbZxpmTHw82rIP7YYew&bvm=bv.97653015,d.cWw"
|
564
|
+
# => url = "https://www.google.com.ar/url?q=https://www.linkedin.com/pub/mark-greene/2/bb8/b59&sa=U&ved=0CDoQFjAIahUKEwiqivi5sdvGAhWJg5AKHSzkB5o&usg=AFQjCNGE09H9hf92mfvwPVnComssDjBBCw"
|
565
|
+
# If the url is not a redirect-url, this function returns the same url.
|
566
|
+
=begin
|
567
|
+
def get_redirect(url)
|
568
|
+
begin
|
569
|
+
res = nil
|
570
|
+
httpc = HTTPClient.new
|
571
|
+
resp = httpc.get(url)
|
572
|
+
res = resp.header['Location']
|
573
|
+
|
574
|
+
if res.size == 0
|
575
|
+
uri = URI.parse(url)
|
576
|
+
uri_params = CGI.parse(uri.query)
|
577
|
+
redirected_url = uri_params['url'][0]
|
578
|
+
|
579
|
+
if ( redirected_url != nil )
|
580
|
+
res = redirected_url
|
581
|
+
else
|
582
|
+
res = url
|
583
|
+
end
|
584
|
+
else
|
585
|
+
res = res[0]
|
586
|
+
end
|
587
|
+
rescue
|
588
|
+
res = url
|
589
|
+
end
|
590
|
+
return res
|
591
|
+
end
|
592
|
+
=end
|
593
|
+
# returns a hash with the parametes in the url
|
594
|
+
def self.params(url)
|
595
|
+
# TODO: Corregir este parche:
|
596
|
+
# => El codigo de abajo usa la URL de una busqueda en google. Esta url generara una excepcion cuando se intenta parsear sus parametros.
|
597
|
+
# => Ejecutar las 2 lineas de abajo para verificar.
|
598
|
+
# => url = "https://www.google.com/webhp#q=[lead+generation]+%22John%22+%22Greater+New+York+City+Area+*+Financial+Services%22+site:linkedin.com%2Fpub+-site:linkedin.com%2Fpub%2Fdir"
|
599
|
+
# => p = CGI::parse(URI.parse(url).query)
|
600
|
+
# => La linea de abajo hace un gsbub que hace que esta url siga funcionando como busqueda de google, y ademas se posible parsearla.
|
601
|
+
url = url.gsub("webhp#q=", "webhp?q=")
|
602
|
+
|
603
|
+
return CGI::parse(URI.parse(url).query)
|
604
|
+
end
|
605
|
+
|
606
|
+
# Add a parameter to the url. It doesn't validate if the param already exists.
|
607
|
+
def self.add_param(url, param_name, param_value)
|
608
|
+
uri = URI(url)
|
609
|
+
params = URI.decode_www_form(uri.query || '')
|
610
|
+
|
611
|
+
if (params.size==0)
|
612
|
+
params << [param_name, param_value]
|
613
|
+
uri.query = URI.encode_www_form(params)
|
614
|
+
return uri.to_s
|
615
|
+
else
|
616
|
+
uri.query = URI.encode_www_form(params)
|
617
|
+
return uri.to_s + "&" + param_name + "=" + param_value
|
618
|
+
end
|
619
|
+
end
|
620
|
+
|
621
|
+
# Changes the value of a parameter in the url. It doesn't validate if the param already exists.
|
622
|
+
def self.change_param(url, param_name, param_value)
|
623
|
+
uri = URI(url)
|
624
|
+
# params = URI.decode_www_form(uri.query || [])
|
625
|
+
params = CGI.parse(uri.query)
|
626
|
+
params["start"] = param_value
|
627
|
+
uri.query = URI.encode_www_form(params)
|
628
|
+
uri.to_s
|
629
|
+
end
|
630
|
+
|
631
|
+
# Change or add the value of a parameter in the url, depending if the parameter already exists or not.
|
632
|
+
def self.set_param(url, param_name, param_value)
|
633
|
+
params = BlackStack::Netting::params(url)
|
634
|
+
if ( params.has_key?(param_name) == true )
|
635
|
+
newurl = BlackStack::Netting::change_param(url, param_name, param_value)
|
636
|
+
else
|
637
|
+
newurl = BlackStack::Netting::add_param(url, param_name, param_value)
|
638
|
+
end
|
639
|
+
return newurl
|
640
|
+
end
|
641
|
+
|
642
|
+
# get the domain from any url
|
643
|
+
def self.getDomainFromUrl(url)
|
644
|
+
if (url !~ /^http:\/\//i && url !~ /^https:\/\//i)
|
645
|
+
url = "http://#{url}"
|
646
|
+
end
|
647
|
+
|
648
|
+
if (URI.parse(url).host == nil)
|
649
|
+
raise "Cannot get domain for #{url}"
|
650
|
+
end
|
651
|
+
|
652
|
+
if (url.to_s.length>0)
|
653
|
+
return URI.parse(url).host.sub(/^www\./, '')
|
654
|
+
else
|
655
|
+
return nil
|
656
|
+
end
|
657
|
+
end
|
658
|
+
|
659
|
+
def self.getDomainFromEmail(email)
|
660
|
+
if email.email?
|
661
|
+
return email.split("@").last
|
662
|
+
else
|
663
|
+
raise "getDomainFromEmail: Wrong email format."
|
664
|
+
end
|
665
|
+
end
|
666
|
+
|
667
|
+
def self.getWhoisDomains(domain, allow_heuristic_to_avoid_hosting_companies=false)
|
668
|
+
a = Array.new
|
669
|
+
c = Whois::Client.new
|
670
|
+
r = c.lookup(domain)
|
671
|
+
|
672
|
+
res = r.to_s.scan(/Registrant Email: (#{BlackStack::Strings::MATCH_EMAIL})/).first
|
673
|
+
if (res!=nil)
|
674
|
+
a << BlackStack::Netting::getDomainFromEmail(res[0].downcase)
|
675
|
+
end
|
676
|
+
|
677
|
+
res = r.to_s.scan(/Admin Email: (#{BlackStack::Strings::MATCH_EMAIL})/).first
|
678
|
+
if (res!=nil)
|
679
|
+
a << BlackStack::Netting::getDomainFromEmail(res[0].downcase)
|
680
|
+
end
|
681
|
+
|
682
|
+
res = r.to_s.scan(/Tech Email: (#{BlackStack::Strings::MATCH_EMAIL})/).first
|
683
|
+
if (res!=nil)
|
684
|
+
a << BlackStack::Netting::getDomainFromEmail(res[0].downcase)
|
685
|
+
end
|
686
|
+
|
687
|
+
# remover duplicados
|
688
|
+
a = a.uniq
|
689
|
+
|
690
|
+
#
|
691
|
+
if (allow_heuristic_to_avoid_hosting_companies==true)
|
692
|
+
# TODO: develop this feature
|
693
|
+
end
|
694
|
+
|
695
|
+
return a
|
696
|
+
end
|
697
|
+
|
555
698
|
end # module Netting
|
556
699
|
|
557
700
|
end # module BlackStack
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: blackstack_commons
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.20
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Leandro Daniel Sardi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-12-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: content_spinning
|
@@ -50,7 +50,7 @@ dependencies:
|
|
50
50
|
- - ">="
|
51
51
|
- !ruby/object:Gem::Version
|
52
52
|
version: 1.8.1
|
53
|
-
description: 'Find documentation here: https://github.com/leandrosardi/blackstack_commons.'
|
53
|
+
description: 'THIS GEM IS STILL IN DEVELOPMENT STAGE. Find documentation here: https://github.com/leandrosardi/blackstack_commons.'
|
54
54
|
email: leandro.sardi@expandedventure.com
|
55
55
|
executables: []
|
56
56
|
extensions: []
|
@@ -89,5 +89,6 @@ rubyforge_project:
|
|
89
89
|
rubygems_version: 2.4.5.1
|
90
90
|
signing_key:
|
91
91
|
specification_version: 4
|
92
|
-
summary: Commons classes, functions and constants
|
92
|
+
summary: THIS GEM IS STILL IN DEVELOPMENT STAGE. Commons classes, functions and constants
|
93
|
+
for the BlackStack framework.
|
93
94
|
test_files: []
|