mirror of https://gitlab.com/bashrc2/epicyon
Merge branch 'main' of ssh://code.freedombone.net:2222/bashrc/epicyon
commit
1ae955a024
132
city.py
132
city.py
|
|
@ -126,10 +126,45 @@ def _getCityPulse(currTimeOfDay, decoySeed: int) -> (float, float):
|
||||||
return distanceFromCityCenter, angleRadians
|
return distanceFromCityCenter, angleRadians
|
||||||
|
|
||||||
|
|
||||||
|
def parseNogoString(nogoLine: str) -> []:
|
||||||
|
"""Parses a line from locations_nogo.txt and returns the polygon
|
||||||
|
"""
|
||||||
|
polygonStr = nogoLine.split(':', 1)[1]
|
||||||
|
if ';' in polygonStr:
|
||||||
|
pts = polygonStr.split(';')
|
||||||
|
else:
|
||||||
|
pts = polygonStr.split(',')
|
||||||
|
if len(pts) <= 4:
|
||||||
|
return []
|
||||||
|
polygon = []
|
||||||
|
for index in range(int(len(pts)/2)):
|
||||||
|
if index*2 + 1 >= len(pts):
|
||||||
|
break
|
||||||
|
longitudeStr = pts[index*2].strip()
|
||||||
|
latitudeStr = pts[index*2 + 1].strip()
|
||||||
|
if 'E' in latitudeStr or 'W' in latitudeStr:
|
||||||
|
longitudeStr = pts[index*2 + 1].strip()
|
||||||
|
latitudeStr = pts[index*2].strip()
|
||||||
|
if 'E' in longitudeStr:
|
||||||
|
longitudeStr = \
|
||||||
|
longitudeStr.replace('E', '')
|
||||||
|
longitude = float(longitudeStr)
|
||||||
|
elif 'W' in longitudeStr:
|
||||||
|
longitudeStr = \
|
||||||
|
longitudeStr.replace('W', '')
|
||||||
|
longitude = -float(longitudeStr)
|
||||||
|
else:
|
||||||
|
longitude = float(longitudeStr)
|
||||||
|
latitude = float(latitudeStr)
|
||||||
|
polygon.append([latitude, longitude])
|
||||||
|
return polygon
|
||||||
|
|
||||||
|
|
||||||
def spoofGeolocation(baseDir: str,
|
def spoofGeolocation(baseDir: str,
|
||||||
city: str, currTime, decoySeed: int,
|
city: str, currTime, decoySeed: int,
|
||||||
citiesList: []) -> (float, float, str, str,
|
citiesList: [],
|
||||||
str, str, int):
|
nogoList: []) -> (float, float, str, str,
|
||||||
|
str, str, int):
|
||||||
"""Given a city and the current time spoofs the location
|
"""Given a city and the current time spoofs the location
|
||||||
for an image
|
for an image
|
||||||
returns latitude, longitude, N/S, E/W,
|
returns latitude, longitude, N/S, E/W,
|
||||||
|
|
@ -138,6 +173,11 @@ def spoofGeolocation(baseDir: str,
|
||||||
locationsFilename = baseDir + '/custom_locations.txt'
|
locationsFilename = baseDir + '/custom_locations.txt'
|
||||||
if not os.path.isfile(locationsFilename):
|
if not os.path.isfile(locationsFilename):
|
||||||
locationsFilename = baseDir + '/locations.txt'
|
locationsFilename = baseDir + '/locations.txt'
|
||||||
|
|
||||||
|
nogoFilename = baseDir + '/custom_locations_nogo.txt'
|
||||||
|
if not os.path.isfile(nogoFilename):
|
||||||
|
nogoFilename = baseDir + '/locations_nogo.txt'
|
||||||
|
|
||||||
manCityRadius = 0.1
|
manCityRadius = 0.1
|
||||||
varianceAtLocation = 0.0004
|
varianceAtLocation = 0.0004
|
||||||
default_latitude = 51.8744
|
default_latitude = 51.8744
|
||||||
|
|
@ -156,6 +196,19 @@ def spoofGeolocation(baseDir: str,
|
||||||
with open(locationsFilename, "r") as f:
|
with open(locationsFilename, "r") as f:
|
||||||
cities = f.readlines()
|
cities = f.readlines()
|
||||||
|
|
||||||
|
nogo = []
|
||||||
|
if nogoList:
|
||||||
|
nogo = nogoList
|
||||||
|
else:
|
||||||
|
if os.path.isfile(nogoFilename):
|
||||||
|
with open(nogoFilename, "r") as f:
|
||||||
|
nogoList = f.readlines()
|
||||||
|
for line in nogoList:
|
||||||
|
if line.startswith(city + ':'):
|
||||||
|
polygon = parseNogoString(line)
|
||||||
|
if polygon:
|
||||||
|
nogo.append(polygon)
|
||||||
|
|
||||||
city = city.lower()
|
city = city.lower()
|
||||||
for cityName in cities:
|
for cityName in cities:
|
||||||
if city in cityName.lower():
|
if city in cityName.lower():
|
||||||
|
|
@ -183,22 +236,35 @@ def spoofGeolocation(baseDir: str,
|
||||||
datetime.timedelta(hours=approxTimeZone)
|
datetime.timedelta(hours=approxTimeZone)
|
||||||
camMake, camModel, camSerialNumber = \
|
camMake, camModel, camSerialNumber = \
|
||||||
_getDecoyCamera(decoySeed)
|
_getDecoyCamera(decoySeed)
|
||||||
# patterns of activity change in the city over time
|
validCoord = False
|
||||||
(distanceFromCityCenter, angleRadians) = \
|
seedOffset = 0
|
||||||
_getCityPulse(currTimeAdjusted, decoySeed)
|
while not validCoord:
|
||||||
# The city radius value is in longitude and the reference
|
# patterns of activity change in the city over time
|
||||||
# is Manchester. Adjust for the radius of the chosen city.
|
(distanceFromCityCenter, angleRadians) = \
|
||||||
if areaKm2 > 1:
|
_getCityPulse(currTimeAdjusted, decoySeed + seedOffset)
|
||||||
manRadius = math.sqrt(630 / math.pi)
|
# The city radius value is in longitude and the reference
|
||||||
radius = math.sqrt(areaKm2 / math.pi)
|
# is Manchester. Adjust for the radius of the chosen city.
|
||||||
cityRadius = manCityRadius * manRadius / radius
|
if areaKm2 > 1:
|
||||||
else:
|
manRadius = math.sqrt(630 / math.pi)
|
||||||
cityRadius = manCityRadius
|
radius = math.sqrt(areaKm2 / math.pi)
|
||||||
# Get the position within the city, with some randomness added
|
cityRadius = manCityRadius * manRadius / radius
|
||||||
latitude += \
|
else:
|
||||||
distanceFromCityCenter * cityRadius * math.cos(angleRadians)
|
cityRadius = manCityRadius
|
||||||
longitude += \
|
# Get the position within the city, with some randomness added
|
||||||
distanceFromCityCenter * cityRadius * math.sin(angleRadians)
|
latitude += \
|
||||||
|
distanceFromCityCenter * cityRadius * \
|
||||||
|
math.cos(angleRadians)
|
||||||
|
longitude += \
|
||||||
|
distanceFromCityCenter * cityRadius * \
|
||||||
|
math.sin(angleRadians)
|
||||||
|
longval = longitude
|
||||||
|
if longdirection == 'W':
|
||||||
|
longval = -longitude
|
||||||
|
validCoord = not pointInNogo(nogo, latitude, longval)
|
||||||
|
if not validCoord:
|
||||||
|
seedOffset += 1
|
||||||
|
if seedOffset > 100:
|
||||||
|
break
|
||||||
# add a small amount of variance around the location
|
# add a small amount of variance around the location
|
||||||
fraction = randint(0, 100000) / 100000
|
fraction = randint(0, 100000) / 100000
|
||||||
distanceFromLocation = fraction * fraction * varianceAtLocation
|
distanceFromLocation = fraction * fraction * varianceAtLocation
|
||||||
|
|
@ -229,3 +295,33 @@ def getSpoofedCity(city: str, baseDir: str, nickname: str, domain: str) -> str:
|
||||||
with open(cityFilename, 'r') as fp:
|
with open(cityFilename, 'r') as fp:
|
||||||
city = fp.read().replace('\n', '')
|
city = fp.read().replace('\n', '')
|
||||||
return city
|
return city
|
||||||
|
|
||||||
|
|
||||||
|
def _pointInPolygon(poly: [], x: float, y: float) -> bool:
|
||||||
|
"""Returns true if the given point is inside the given polygon
|
||||||
|
"""
|
||||||
|
n = len(poly)
|
||||||
|
inside = False
|
||||||
|
p2x = 0.0
|
||||||
|
p2y = 0.0
|
||||||
|
xints = 0.0
|
||||||
|
p1x, p1y = poly[0]
|
||||||
|
for i in range(n + 1):
|
||||||
|
p2x, p2y = poly[i % n]
|
||||||
|
if y > min(p1y, p2y):
|
||||||
|
if y <= max(p1y, p2y):
|
||||||
|
if x <= max(p1x, p2x):
|
||||||
|
if p1y != p2y:
|
||||||
|
xints = (y - p1y) * (p2x - p1x) / (p2y - p1y) + p1x
|
||||||
|
if p1x == p2x or x <= xints:
|
||||||
|
inside = not inside
|
||||||
|
p1x, p1y = p2x, p2y
|
||||||
|
|
||||||
|
return inside
|
||||||
|
|
||||||
|
|
||||||
|
def pointInNogo(nogo: [], latitude: float, longitude: float) -> bool:
|
||||||
|
for polygon in nogo:
|
||||||
|
if _pointInPolygon(polygon, latitude, longitude):
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1,14 @@
|
||||||
|
NEW YORK, USA: 73.951W,40.879, 73.974W,40.83, 74.029W,40.756, 74.038W,40.713, 74.056W,40.713, 74.127W,40.647, 74.038W,40.629, 73.995W,40.667, 74.014W,40.676, 73.994W,40.702, 73.967W,40.699, 73.958W,40.729, 73.956W,40.745, 73.918W,40.781, 73.937W,40.793, 73.946W,40.782, 73.977W,40.738, 73.98W,40.713, 74.012W,40.705, 74.006W,40.752, 73.955W,40.824
|
||||||
|
NEW YORK, USA: 74.115W,40.663, 74.065W,40.602, 74.118W,40.555, 74.047W,40.516, 73.882W,40.547, 73.909W,40.618, 73.978W,40.579, 74.009W,40.602, 74.033W,40.61, 74.039W,40.623, 74.032W,40.641, 73.996W,40.665
|
||||||
|
LONDON, ENGLAND: 0.23888E,51.459, 0.1216E,51.5, 0.016E,51.479, 0.097W,51.502, 0.126W,51.482, 0.196W,51.457, 0.292W,51.465, 0.309W,51.49, 0.226W,51.495, 0.198W,51.47, 0.174W,51.488, 0.136W,51.489, 0.1189W,51.515, 0.038E,51.513, 0.0692E,51.51, 0.12833E,51.526, 0.3289E,51.475
|
||||||
|
LONDON, ENGLAND: 0.054W,51.535, 0.044W,51.53, 0.008W,51.55, 0.0429W,51.57, 0.038W,51.6, 0.0209W,51.603, 0.032W,51.613, 0.00191E,51.66, 0.024W,51.666, 0.0313W,51.659, 0.0639W,51.579, 0.059W,51.568, 0.0329W,51.552
|
||||||
|
BERLIN, GERMANY: 13.491E,52.469, 13.416E,52.512, 13.378E,52.517, 13.377E,52.51, 13.336E,52.508, 13.323E,52.518, 13.286E,52.518, 13.295E,52.533, 13.309E,52.522, 13.322E,52.526, 13.395E,52.524, 13.421E,52.516, 13.465E,52.499, 13.471E,52.502, 13.498E,52.487, 13.501E,52.479, 13.51E,52.46
|
||||||
|
ISTANBUL, TURKEY: 28.758E,41.117, 28.781E,41.001, 28.871E,40.978, 28.963E,41.013, 28.923E,41.057, 28.949E,41.071, 28.952E,41.047, 28.979E,41.031, 28.998E,41.045, 29.026E,41.052, 29.05073E,41.101, 29.059E,41.127, 29.028E,41.158, 29.095E,41.214, 29.135E,41.196, 29.084E,41.145, 29.107E,41.12, 29.074E,41.098, 29.068E,41.075, 29.057E,41.046, 29.014E,41.022, 29.033E,40.987, 29.103E,40.953, 29.147E,40.907, 29.186E,40.889, 29.232E,40.877, 29.199E,40.82, 28.609E,40.932
|
||||||
|
MADRID, SPAIN: 3.774W,40.397, 3.713W,40.415, 3.712W,40.422, 3.721W,40.432, 3.717W,40.435, 3.713W,40.463, 3.729W,40.46, 3.737W,40.475, 3.748W,40.472, 3.749W,40.477, 3.766W,40.472, 3.762W,40.458, 3.788W,40.442, 3.789W,40.427, 3.781W,40.43, 3.777W,40.426, 3.782W,40.419, 3.778W,40.407
|
||||||
|
MADRID, SPAIN: 3.688W,40.407, 3.678W,40.408, 3.675W,40.411, 3.679W,40.422, 3.688W,40.42, 3.689W,40.416
|
||||||
|
MADRID, SPAIN: 3.654W,40.412, 3.617W,40.405, 3.604W,40.411, 3.607W,40.419, 3.62W,40.415, 3.623W,40.419, 3.627W,40.419, 3.646W,40.427, 3.649W,40.419, 3.657W,40.422
|
||||||
|
LOS ANGELES, USA: 118.475W,34.146, 118.499W,34.024, 118.368W,33.832, 118.254W,33.769, 118.114W,33.772, 117.891W,33.62, 117.471W,33.333, 117.954W,32.915, 119.299W,33.779
|
||||||
|
SAN JOSE, USA: 121.988W,37.408, 121.924W,37.452, 121.951W,37.498, 121.992W,37.505, 122.056W,37.54, 122.077W,37.578, 122.098W,37.618, 122.131W,37.637, 122.189W,37.706, 122.227W,37.775, 122.279W,37.798, 122.315W,37.802, 122.291W,37.832, 122.309W,37.902, 122.382W,37.915, 122.368W,37.927, 122.514W,37.882, 122.473W,37.83, 122.481W,37.788, 122.394W,37.796, 122.384W,37.729, 122.4W,37.688, 122.382W,37.654, 122.406W,37.637, 122.392W,37.612, 122.356W,37.586, 122.332W,37.586, 122.275W,37.529, 122.228W,37.488, 122.181W,37.482, 122.134W,37.48, 122.128W,37.471, 122.122W,37.448, 122.095W,37.428, 122.07W,37.413, 122.036W,37.402, 122.035W,37.421
|
||||||
|
SAN FRANCISCO, USA: 118.475W,34.146, 118.499W,34.024, 118.368W,33.832, 118.254W,33.769, 118.114W,33.772, 117.891W,33.62, 117.471W,33.333, 117.954W,32.915, 119.299W,33.779
|
||||||
|
SAN JOSE, USA: 121.988W,37.408, 121.924W,37.452, 121.951W,37.498, 121.992W,37.505, 122.056W,37.54, 122.077W,37.578, 122.098W,37.618, 122.131W,37.637, 122.189W,37.706, 122.227W,37.775, 122.279W,37.798, 122.315W,37.802, 122.291W,37.832, 122.309W,37.902, 122.382W,37.915, 122.368W,37.927, 122.514W,37.882, 122.473W,37.83, 122.481W,37.788, 122.394W,37.796, 122.384W,37.729, 122.4W,37.688, 122.382W,37.654, 122.406W,37.637, 122.392W,37.612, 122.356W,37.586, 122.332W,37.586, 122.275W,37.529, 122.228W,37.488, 122.181W,37.482, 122.134W,37.48, 122.128W,37.471, 122.122W,37.448, 122.095W,37.428, 122.07W,37.413, 122.036W,37.402, 122.035W,37.421
|
||||||
|
OAKLAND, USA: 121.988W,37.408, 121.924W,37.452, 121.951W,37.498, 121.992W,37.505, 122.056W,37.54, 122.077W,37.578, 122.098W,37.618, 122.131W,37.637, 122.189W,37.706, 122.227W,37.775, 122.279W,37.798, 122.315W,37.802, 122.291W,37.832, 122.309W,37.902, 122.382W,37.915, 122.368W,37.927, 122.514W,37.882, 122.473W,37.83, 122.481W,37.788, 122.394W,37.796, 122.384W,37.729, 122.4W,37.688, 122.382W,37.654, 122.406W,37.637, 122.392W,37.612, 122.356W,37.586, 122.332W,37.586, 122.275W,37.529, 122.228W,37.488, 122.181W,37.482, 122.134W,37.48, 122.128W,37.471, 122.122W,37.448, 122.095W,37.428, 122.07W,37.413, 122.036W,37.402, 122.035W,37.421
|
||||||
2
media.py
2
media.py
|
|
@ -87,7 +87,7 @@ def _spoofMetaData(baseDir: str, nickname: str, domain: str,
|
||||||
(latitude, longitude, latitudeRef, longitudeRef,
|
(latitude, longitude, latitudeRef, longitudeRef,
|
||||||
camMake, camModel, camSerialNumber) = \
|
camMake, camModel, camSerialNumber) = \
|
||||||
spoofGeolocation(baseDir, spoofCity, currTimeAdjusted,
|
spoofGeolocation(baseDir, spoofCity, currTimeAdjusted,
|
||||||
decoySeed, None)
|
decoySeed, None, None)
|
||||||
os.system('exiftool -artist="' + nickname + '" ' +
|
os.system('exiftool -artist="' + nickname + '" ' +
|
||||||
'-Make="' + camMake + '" ' +
|
'-Make="' + camMake + '" ' +
|
||||||
'-Model="' + camModel + '" ' +
|
'-Model="' + camModel + '" ' +
|
||||||
|
|
|
||||||
83
tests.py
83
tests.py
|
|
@ -81,7 +81,9 @@ from like import likePost
|
||||||
from like import sendLikeViaServer
|
from like import sendLikeViaServer
|
||||||
from announce import announcePublic
|
from announce import announcePublic
|
||||||
from announce import sendAnnounceViaServer
|
from announce import sendAnnounceViaServer
|
||||||
|
from city import parseNogoString
|
||||||
from city import spoofGeolocation
|
from city import spoofGeolocation
|
||||||
|
from city import pointInNogo
|
||||||
from media import getMediaPath
|
from media import getMediaPath
|
||||||
from media import getAttachmentMediaType
|
from media import getAttachmentMediaType
|
||||||
from delete import sendDeleteViaServer
|
from delete import sendDeleteViaServer
|
||||||
|
|
@ -3605,19 +3607,45 @@ def testRemovePostInteractions() -> None:
|
||||||
|
|
||||||
def testSpoofGeolocation() -> None:
|
def testSpoofGeolocation() -> None:
|
||||||
print('testSpoofGeolocation')
|
print('testSpoofGeolocation')
|
||||||
|
nogoLine = \
|
||||||
|
'NEW YORK, USA: 73.951W,40.879, 73.974W,40.83, ' + \
|
||||||
|
'74.029W,40.756, 74.038W,40.713, 74.056W,40.713, ' + \
|
||||||
|
'74.127W,40.647, 74.038W,40.629, 73.995W,40.667, ' + \
|
||||||
|
'74.014W,40.676, 73.994W,40.702, 73.967W,40.699, ' + \
|
||||||
|
'73.958W,40.729, 73.956W,40.745, 73.918W,40.781, ' + \
|
||||||
|
'73.937W,40.793, 73.946W,40.782, 73.977W,40.738, ' + \
|
||||||
|
'73.98W,40.713, 74.012W,40.705, 74.006W,40.752, ' + \
|
||||||
|
'73.955W,40.824'
|
||||||
|
polygon = parseNogoString(nogoLine)
|
||||||
|
assert len(polygon) > 0
|
||||||
|
assert polygon[0][1] == -73.951
|
||||||
|
assert polygon[0][0] == 40.879
|
||||||
citiesList = [
|
citiesList = [
|
||||||
'NEW YORK, USA:40.7127281:W74.0060152:784',
|
'NEW YORK, USA:40.7127281:W74.0060152:784',
|
||||||
'LOS ANGELES, USA:34.0536909:W118.242766:1214',
|
'LOS ANGELES, USA:34.0536909:W118.242766:1214',
|
||||||
'HOUSTON, USA:29.6072:W95.1586:1553',
|
'HOUSTON, USA:29.6072:W95.1586:1553',
|
||||||
'MANCHESTER, ENGLAND:53.4794892:W2.2451148:630',
|
'MANCHESTER, ENGLAND:53.4794892:W2.2451148:630',
|
||||||
'BERLIN, GERMANY:52.5170365:13.3888599:891',
|
'BERLIN, GERMANY:52.5170365:13.3888599:891',
|
||||||
'ANKARA, TURKEY:39.93:32.85:24521'
|
'ANKARA, TURKEY:39.93:32.85:24521',
|
||||||
|
'LONDON, ENGLAND:51.5073219:W0.1276474:1738'
|
||||||
]
|
]
|
||||||
|
testSquare = [
|
||||||
|
[[0.03, 0.01], [0.02, 10], [10.01, 10.02], [10.03, 0.02]]
|
||||||
|
]
|
||||||
|
assert pointInNogo(testSquare, 5, 5)
|
||||||
|
assert pointInNogo(testSquare, 2, 3)
|
||||||
|
assert not pointInNogo(testSquare, 20, 5)
|
||||||
|
assert not pointInNogo(testSquare, 11, 6)
|
||||||
|
assert not pointInNogo(testSquare, 5, -5)
|
||||||
|
assert not pointInNogo(testSquare, 5, 11)
|
||||||
|
assert not pointInNogo(testSquare, -5, -5)
|
||||||
|
assert not pointInNogo(testSquare, -5, 5)
|
||||||
|
nogoList = []
|
||||||
currTime = datetime.datetime.utcnow()
|
currTime = datetime.datetime.utcnow()
|
||||||
decoySeed = 7634681
|
decoySeed = 7634681
|
||||||
cityRadius = 0.1
|
cityRadius = 0.1
|
||||||
coords = spoofGeolocation('', 'los angeles', currTime,
|
coords = spoofGeolocation('', 'los angeles', currTime,
|
||||||
decoySeed, citiesList)
|
decoySeed, citiesList, nogoList)
|
||||||
assert coords[0] >= 34.0536909 - cityRadius
|
assert coords[0] >= 34.0536909 - cityRadius
|
||||||
assert coords[0] <= 34.0536909 + cityRadius
|
assert coords[0] <= 34.0536909 + cityRadius
|
||||||
assert coords[1] >= 118.242766 - cityRadius
|
assert coords[1] >= 118.242766 - cityRadius
|
||||||
|
|
@ -3627,8 +3655,9 @@ def testSpoofGeolocation() -> None:
|
||||||
assert len(coords[4]) > 4
|
assert len(coords[4]) > 4
|
||||||
assert len(coords[5]) > 4
|
assert len(coords[5]) > 4
|
||||||
assert coords[6] > 0
|
assert coords[6] > 0
|
||||||
|
nogoList = []
|
||||||
coords = spoofGeolocation('', 'unknown', currTime,
|
coords = spoofGeolocation('', 'unknown', currTime,
|
||||||
decoySeed, citiesList)
|
decoySeed, citiesList, nogoList)
|
||||||
assert coords[0] >= 51.8744 - cityRadius
|
assert coords[0] >= 51.8744 - cityRadius
|
||||||
assert coords[0] <= 51.8744 + cityRadius
|
assert coords[0] <= 51.8744 + cityRadius
|
||||||
assert coords[1] >= 0.368333 - cityRadius
|
assert coords[1] >= 0.368333 - cityRadius
|
||||||
|
|
@ -3641,6 +3670,14 @@ def testSpoofGeolocation() -> None:
|
||||||
kmlStr = '<?xml version="1.0" encoding="UTF-8"?>\n'
|
kmlStr = '<?xml version="1.0" encoding="UTF-8"?>\n'
|
||||||
kmlStr += '<kml xmlns="http://www.opengis.net/kml/2.2">\n'
|
kmlStr += '<kml xmlns="http://www.opengis.net/kml/2.2">\n'
|
||||||
kmlStr += '<Document>\n'
|
kmlStr += '<Document>\n'
|
||||||
|
nogoLine2 = \
|
||||||
|
'NEW YORK, USA: 74.115W,40.663, 74.065W,40.602, ' + \
|
||||||
|
'74.118W,40.555, 74.047W,40.516, 73.882W,40.547, ' + \
|
||||||
|
'73.909W,40.618, 73.978W,40.579, 74.009W,40.602, ' + \
|
||||||
|
'74.033W,40.61, 74.039W,40.623, 74.032W,40.641, ' + \
|
||||||
|
'73.996W,40.665'
|
||||||
|
polygon2 = parseNogoString(nogoLine2)
|
||||||
|
nogoList = [polygon, polygon2]
|
||||||
for i in range(1000):
|
for i in range(1000):
|
||||||
dayNumber = randint(10, 30)
|
dayNumber = randint(10, 30)
|
||||||
hour = randint(1, 23)
|
hour = randint(1, 23)
|
||||||
|
|
@ -3651,7 +3688,45 @@ def testSpoofGeolocation() -> None:
|
||||||
" " + hourStr + ":14",
|
" " + hourStr + ":14",
|
||||||
"%Y-%m-%d %H:%M")
|
"%Y-%m-%d %H:%M")
|
||||||
coords = spoofGeolocation('', 'new york, usa', currTime,
|
coords = spoofGeolocation('', 'new york, usa', currTime,
|
||||||
decoySeed, citiesList)
|
decoySeed, citiesList, nogoList)
|
||||||
|
longitude = coords[1]
|
||||||
|
if coords[3] == 'W':
|
||||||
|
longitude = -coords[1]
|
||||||
|
kmlStr += '<Placemark id="' + str(i) + '">\n'
|
||||||
|
kmlStr += ' <name>' + str(i) + '</name>\n'
|
||||||
|
kmlStr += ' <Point>\n'
|
||||||
|
kmlStr += ' <coordinates>' + str(longitude) + ',' + \
|
||||||
|
str(coords[0]) + ',0</coordinates>\n'
|
||||||
|
kmlStr += ' </Point>\n'
|
||||||
|
kmlStr += '</Placemark>\n'
|
||||||
|
|
||||||
|
nogoLine = \
|
||||||
|
'LONDON, ENGLAND: 0.23888E,51.459, 0.1216E,51.5, ' + \
|
||||||
|
'0.016E,51.479, 0.097W,51.502, 0.126W,51.482, ' + \
|
||||||
|
'0.196W,51.457, 0.292W,51.465, 0.309W,51.49, ' + \
|
||||||
|
'0.226W,51.495, 0.198W,51.47, 0.174W,51.488, ' + \
|
||||||
|
'0.136W,51.489, 0.1189W,51.515, 0.038E,51.513, ' + \
|
||||||
|
'0.0692E,51.51, 0.12833E,51.526, 0.3289E,51.475'
|
||||||
|
polygon = parseNogoString(nogoLine)
|
||||||
|
nogoLine2 = \
|
||||||
|
'LONDON, ENGLAND: 0.054W,51.535, 0.044W,51.53, ' + \
|
||||||
|
'0.008W,51.55, 0.0429W,51.57, 0.038W,51.6, ' + \
|
||||||
|
'0.0209W,51.603, 0.032W,51.613, 0.00191E,51.66, ' + \
|
||||||
|
'0.024W,51.666, 0.0313W,51.659, 0.0639W,51.579, ' + \
|
||||||
|
'0.059W,51.568, 0.0329W,51.552'
|
||||||
|
polygon2 = parseNogoString(nogoLine2)
|
||||||
|
nogoList = [polygon, polygon2]
|
||||||
|
for i in range(1000):
|
||||||
|
dayNumber = randint(10, 30)
|
||||||
|
hour = randint(1, 23)
|
||||||
|
hourStr = str(hour)
|
||||||
|
if hour < 10:
|
||||||
|
hourStr = '0' + hourStr
|
||||||
|
currTime = datetime.datetime.strptime("2021-05-" + str(dayNumber) +
|
||||||
|
" " + hourStr + ":14",
|
||||||
|
"%Y-%m-%d %H:%M")
|
||||||
|
coords = spoofGeolocation('', 'london, england', currTime,
|
||||||
|
decoySeed, citiesList, nogoList)
|
||||||
longitude = coords[1]
|
longitude = coords[1]
|
||||||
if coords[3] == 'W':
|
if coords[3] == 'W':
|
||||||
longitude = -coords[1]
|
longitude = -coords[1]
|
||||||
|
|
|
||||||
|
|
@ -41,6 +41,10 @@ def getHashtagCategoriesFeed(baseDir: str,
|
||||||
rssStr += ' <title>' + categoryStr + '</title>\n'
|
rssStr += ' <title>' + categoryStr + '</title>\n'
|
||||||
listStr = ''
|
listStr = ''
|
||||||
for hashtag in hashtagList:
|
for hashtag in hashtagList:
|
||||||
|
if ':' in hashtag:
|
||||||
|
continue
|
||||||
|
if '&' in hashtag:
|
||||||
|
continue
|
||||||
listStr += hashtag + ' '
|
listStr += hashtag + ' '
|
||||||
rssStr += ' <description>' + listStr.strip() + '</description>\n'
|
rssStr += ' <description>' + listStr.strip() + '</description>\n'
|
||||||
rssStr += ' <link/>\n'
|
rssStr += ' <link/>\n'
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue