Calendars doesn't show camera icon on imported ICS - icalendar

I developed a platform for internal company meeting, using embedded Whereby features.
Why when I import ICS on my Mac calendar it doesn't show the camera icon and "Join meeting" such as Google Calendar ICS?
My meeting:
Google meeting:
Here are ICSs:
My meeting:
BEGIN:VCALENDAR
PRODID:-//Solving Team//Videoconference//IT
VERSION:2.0
CALSCALE:GREGORIAN
METHOD:REQUEST
BEGIN:VEVENT
DTSTAMP:20220218T094928Z
UID:9a980336-eccd-4db6-ab0e-a3e1e2043cb3
SUMMARY:Test
DTSTART:20220218T100000Z
DTEND:20220218T110000Z
SEQUENCE:0
ORGANIZER;CN=Claudio Merli:mailto:c.merli#solvingteam.it
DESCRIPTION:Partecipa al meeting: https://videoconference.solvingteam.it/videocall/624033067
URL:https://videoconference.solvingteam.it/videocall/624033067
END:VEVENT
END:VCALENDAR
Google Meeting:
BEGIN:VCALENDAR
PRODID:-//Google Inc//Google Calendar 70.9054//EN
VERSION:2.0
CALSCALE:GREGORIAN
METHOD:REQUEST
BEGIN:VEVENT
DTSTART:20220218T100000Z
DTEND:20220218T110000Z
DTSTAMP:20220218T095527Z
ORGANIZER;CN=cladlomerli99#gmail.com:mailto:cladlomerli99#gmail.com
UID:36v1l2nufpnqiipkctd63387gl#google.com
ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=
TRUE;CN=c.merli#solvingteam.it;X-NUM-GUESTS=0:mailto:c.merli#solvingteam.it
ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;RSVP=TRUE
;CN=cladlomerli99#gmail.com;X-NUM-GUESTS=0:mailto:cladlomerli99#gmail.com
X-GOOGLE-CONFERENCE:https://meet.google.com/dqf-hkki-ght
X-MICROSOFT-CDO-OWNERAPPTID:-1947795978
CREATED:20220218T095526Z
DESCRIPTION:-::~:~::~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~
:~:~:~:~:~:~:~:~::~:~::-\nNon modificare questa sezione della descrizione.\
n\nQuesto evento include una videochiamata.\nPartecipa: https://meet.google
.com/dqf-hkki-ght\n\nVisualizza il tuo evento in https://calendar.google.co
m/calendar/event?action=VIEW&eid=MzZ2MWwybnVmcG5xaWlwa2N0ZDYzMzg3Z2wgYy5tZX
JsaUBzb2x2aW5ndGVhbS5pdA&tok=MjMjY2xhZGxvbWVybGk5OUBnbWFpbC5jb21hOGFjYjU5YW
RiMTI4NDM3ZWYyYmE0NzA3YjBiYWE4MTBmMWUyZjBh&ctz=Europe%2FAmsterdam&hl=it&es=
1.\n-::~:~::~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~
:~:~:~:~::~:~::-
LAST-MODIFIED:20220218T095526Z
LOCATION:
SEQUENCE:0
STATUS:CONFIRMED
SUMMARY:Test Google
TRANSP:OPAQUE
END:VEVENT
END:VCALENDAR
Which property I should use?

Related

Add marker to multiple layer groups

I have created a map with leafletjs using StyledLayerControl and markercluster:
https://www.wiva.at/v2/basemap-kartentest/
Each marker represents a research project that fits in one category (=layergroup).
Unfortunately I have some projects that fall into three categories (like the very south one near the city LEIBNITZ close to GRAZ). So far this one project is represented as three markers, and I got the feedback this confuses especially in the spiderfied view.
I've come across an issue, when assigning my marker to a variable and then adding the variable to multiple layergroups that unselecting one layergroup makes the marker disappear in the other layer groups as well.
So is there any chance to represent such a project as ONE marker but appearing in multiple layer groups?
If the link above is not sufficient I can add my code (but I'm afraid it's kind of messy).
Thanks for any hint.
EDIT:
So far I add my marker simply like that:
//Green Industry projects
//new (running) projects
var industry_new = new L.LayerGroup();
//Renewable Gasfield, laufend, Wiva, ONLINE
L.marker([46.753278, 15.586361], {icon: industryIcon} ).addTo(industry_new).bindPopup("<p><span style='font-size:12pt;font-weight:bold; color:#0099b8;'>Renewable Gasfield</span></p><b>Projektleitung:</b> Energie Steiermark<br /><b>Standort:</b> Gabersdorf<br /><b>Kategorie:</b> Grüne Industrie<br /><b>Status:</b> laufend<br /><p>Ganzheitlicher Power-to-Gas Ansatz, bei dem aus erneuerbarem Strom durch Elektrolyse grüner Wasserstoff erzeugt wird und eine zweistufige katalytische Methanisierung im großen Maßstab für eine nachhaltige Energieversorgung in den Bereichen Energie, Mobilität und Industrie vereint.</p><a href='https://www.wiva.at/v2/portfolio-item/renewable-gasfield/'>Details...</a>");
//HyTechbasis 4 WIVA, laufend, Wiva, ONLINE
L.marker([48.155278, 14.048056], {icon: industryIcon} ).addTo(industry_new).bindPopup("<p><span style='font-size:12pt;font-weight:bold; color:#0099b8;'>HyTechbasis 4 WIVA</span></p><b>Projektleitung:</b> FRONIUS INTERNATIONAL GmbH<br /><b>Standort:</b> Thalheim<br /><b>Kategorie:</b> Grüne Industrie<br /><b>Status:</b> laufend<br /><p>Hydrogen Technology Basis for WIVA</p><a href='https://www.wiva.at/v2/portfolio-item/hytechbasis-4-wiva-hydrogen-technology-basis-for-wiva/'>Details...</a>");
//Co2EXIDE WIVA, laufend, Wiva, ONLINE
L.marker([48.33826938809515, 14.317320611066839], {icon: industryIcon} ).addTo(industry_new).bindPopup("<p><span style='font-size:12pt;font-weight:bold; color:#0099b8;'>CO2EXIDE</span></p><b>Projektleitung:</b> (österreichischer Partner) Energieinstitut an der JKU Linz<br /><b>Standort:</b> AGH Krakau Demo-Anlage<br /><b>Kategorie:</b> Grüne Industrie<br /><b>Status:</b> laufend<br /><p>CO2-basierte Elektrosynthese von Ethylen Oxiden</p><a href='http://www.co2exide.eu/'>Details...</a>");
//CORALIS WIVA, laufend, Wiva, ONLINE
L.marker([48.288029, 14.324497], {icon: industryIcon} ).addTo(industry_new).bindPopup("<p><span style='font-size:12pt;font-weight:bold; color:#0099b8;'>CORALIS</span></p><b>Projektleitung:</b> Fundación CIRCE / Öst. Partner: Energieinstitut an der JKU Linz<br /><b>Standort:</b> Linz<br /><b>Kategorie:</b> Grüne Industrie<br /><b>Status:</b> laufend<br /><p>Erfahrungen im Bereich der Industriesymbiose zusammenstellen</p><a href='https://cordis.europa.eu/project/id/958337'>Details...</a>");
//UpHY, laufend, Wiva, ONLINE
L.marker([48.14735053624901, 16.492216234765525], {icon: industryIcon} ).addTo(industry_new).bindPopup("<p><span style='font-size:12pt;font-weight:bold; color:#0099b8;'>UpHy I</span></p><b>Projektleitung:</b> OMV<br /><b>Standort:</b> Wien<br /><b>Kategorie:</b> Grüne Mobilität<br /><b>Status:</b> laufend<br /><p>Im Project UpHy I wird die Basis für die Demonstration der Wertschöpfungskette für die grüne H2- Mobilität von der Produktion in einer Elektrolyse über die Logistik bis zur 350 bar Betankungsinfrastruktur für eine kommerziell betriebene Buslinie mit Brennstoffzellenantrieb entwickelt.</p><a href='https://www.wiva.at/v2/portfolio-item/uphy-upscaling-of-green-hydrogen-for-mobility-and-industry/'>Details...</a>");
//Underground Sun.Conversion, laufend, Wiva-Netzwerk
L.marker([48.028889, 13.691944], {icon: industryIcon} ).addTo(industry_new).bindPopup("<p><span style='font-size:12pt;font-weight:bold; color:#0099b8;'>Underground Sun.Conversion</span></p><b>Projektleitung:</b> RAG Austria AG<br /><b>Standort:</b> Pilsbach<br /><b>Kategorie:</b> Grüne Industrie<br /><b>Status:</b> abgeschlossen<br /><p>Chemical storage of renewable energy in porous subsurface reservoirs with exemplary testbed</p><a href='https://www.underground-sun-conversion.at/'>Details...</a>");
I do that for each layer group. Probably this is not the best way, but for me as a java and leaflet beginner the easiest way and I was just very happy everything worked out so far ;-)
Unfortunately that is an unresolved UX issue. The main issue is that in some use cases, you want an OR filter (sounds like it would be your case, since your Markers are duplicated in each group where they fit the associated category); and in others, you want an AND filter...
So if you want to populate your map with all Markers that fit at least one selected category (i.e. implement an OR filter), a possible solution could be to use "dummy" empty Layer Groups for your selection control, clear and re-populate the map with relevant Markers whenever the user selection changes.
For example, if you have the map "overlayadd/remove" events:
// "Dummy" layers to be used in selection control
const dummy1 = L.layerGroup();
const dummy2 = L.layerGroup();
// Actual categories with possibly common Markers
const category1 = L.layerGroup([markerA, markerB]);
const category2 = L.layerGroup([markerA, markerC]);
// Intermediate group to easily clear map content
const content = L.layerGroup().addTo(map);
map.on("overlayadd overlayremove", () => {
// Step 1: remove all content
content.clearLayers();
// Step 2: re-add layers that fit at least one selection
if (map.hasLayer(dummy1)) {
category1.addTo(content)
}
if (map.hasLayer(dummy2)) {
category2.addTo(content)
}
// etc.
});
In case you use Leaflet.markercluster, you can simply use it as the content variable in above snippet.
You also have to create only 1 Marker per project, no longer duplicate them for each category. In normal use cases, this should be avoided, but here we specifically handle this case. For example if Marker A matches categories 1 and 2, you can do:
L.marker(latLngA).addTo(category1).addTo(category2);

Cannot send iCal.net with an image Attachment via MailKit

I'm trying to send a .ics file which has been generated via iCal.net. Opening the file in Outlook is fine and has the image attachment I'm trying to send via MailKit, but when sending via Mailkit, the image is not there.
BEGIN:VCALENDAR
METHOD:REQUEST
PRODID:-//github.com/rianjs/ical.net//NONSGML ical.net 4.0//EN
VERSION:2.0
BEGIN:VEVENT
ATTACH;FMTTYPE=image/png;X-FILENAME=qrcode.png;VALUE=BINARY;ENCODING=BASE6
4:iVBORw0KGgoAAAANSUhEUgAABkAAAAZAAQMAAAAbwhzkAAAABGdBTUEAALGPC/xhBQAAAAF
zUkdCAK7OHOkAAAAGUExURQAAAP7+/soH9D0AAAYwSURBVHja7dyxcYNAEAVQPA4UugRKoTRc
GqW4BIcKNMKBcABzXu8JhIXn/UwSJ/Zt/Oea8Z+kAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ
EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE
BAQEBAXkiyGdTn77iaHt79nLHa1oQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ
EBAQEBAQEBAQEJA9IC+ZVvolhHS3b88hpE+130FAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ
EBAQEBAQEBAQEBAQEBAQEBAQP4AMmQK7vNpruVme80OppxAQEBAQEBAQEBAQEBAQEBAQEBAQE
BAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQECOCeluH1PdeBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
QEBAQEBAQEBAQEBAQEBAQEBAQEBAQkGND4pvaQUBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
QEBAQEBAQEBAQEBAQEBAQEBADgYJE0OG+TTh0TggICAgICAgICAgICAgICAgICAgICAgICAgI
CAgICAgICAgICAgICAgICAgICB7QqqSgpS78TUBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ
EBAQEBAQEBAQEBAQEBAQEBAQF5LGRF4h2MjwoICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICMhGkPI0izvTP6Ju/IosLnk/b1/yBwEBAQEBAQEBAQEBAQEBAQEB
AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB+RVyz1+mdjDlEu6gW4wKAgICAgICAgICAgICA
gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyB6Scc1hp76MdjCGk3I0f5jsAAQEBAQ
EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQHZBRJ348PhYkhNrb6rWTI
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMi2kB8yPfTRJFKe
pnz07fbjdX40tT4QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE
JCtICuSqtWndjDllHotCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA
gICAjIRpDPpj797B+umSOv08PvGcj0sQUBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE
BAQEBAQEBAQEBAQEBAdkD8pJppV/mkMXRYT5VuRtf3kFXU8kHAQEBAQEBAQEBAQEBAQEBAQEB
AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQF5DGQoltbbImQxzYpMkMVN7SAgICAgICAgICAgI
CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAeDnMZEype8p46CgICAgICAgICAgI
CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA8AeSem9pr0oKAgICAgICAgICAgIC
AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwJSU0zh3ynW7yvOM17ceRurAgICAgI
CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMi2kKr00dFTZgdTrjU7A
AEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB2RhyvICAgICAgI
CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC
AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA
gICAgICAgICAgICAgICAgICAgICAgICArMkXJlylJdANIpEAAAAASUVORK5CYILyxAyAPDEDI
E/MAMgTMwDyxAyAPDEDIE/MAMgTMwDyxAyAPDEDIE/MAMgTMwDyxAyAvDnnbM/wVjPz8rNbZ/
VpM98ofs/F97vFWfF33MwAyBMzAPLEDIA8MQMgT8wAyBMzAPLEDIA8MQMgT8wAyBMzAPLEDIA
8MQMgT8wAyBMzAPLEDIA8MQMgT8wAyBMzAPLEDIC8Z2vhmdlaesXNfs85K+veKM7sm/zdir+F
G1v/OVvczADIEzMA8sQMgDwxAyBPzADIEzMA8sQMgDwxAyBPzADIEzMA8sQMgDwxAyBPzADIE
zMA8sQMgDwxAyBPzADIEzMA8sQMgLw552zPwC80Myvrbn3PN/st/gbt9+tu9vtp695wMwMgT8
wAyBMzAPLEDIA8MQMgT8wAyBMzAPLEDIA8MQMgT8wAyBMzAPLEDIA8MQMgT8wAyBMzAPLEDIA
8MQMgT8wAyBMzAPKerYVnZmtpvuics/Lsp30bW/u9eUdbbs5qa7/FmYvczADIEzMA8sQMgDwx
AyBPzADIEzMA8sQMgDwxAyBPzADIEzMA8sQMgDwxAyBPzADIEzMA8sQMgDwxAyBPzADIEzMA8
sQMgLxne4BXnHO2R8iYGev+cDff881+P+2stpj5PdzMAMgTMwDyxAyAPDEDIE/MAMgTMwDyxA
yAPDEDIE/MAMgTMwDyxAyAPDEDIE/MAMgTMwDyxAyAPDEDIE/MAMgTMwDyxAyAvGd7gHebme0
Rvu2csz3Ct93MfPOOimdV/CZv2O/XbX3PxZndzADIEzMA8sQMgDwxAyBPzADIEzMA8sQMgDwx
AyBPzADIEzMA8sQMgDwxAyBPzADIEzMA8sQMgDwxAyBPzADIEzMA8sQMgLxnewD4q3POy8/Oz
Mq6vMfWt7Fla+bib8HNDIA8MQMgT8wAyBMzAPLEDIA8MQMgT8wAyBMzAPLEDIA8MQMgT8wAyB
MzAPLEDIA8MQMgT8wAyBMzAPLEDIA8MQMgT8wAyHu2B+B3mpntEb7tZuZzzsqzN4rv6MbNOW9
9GzduZi7u180MgDwxAyBPzADIEzMA8sQMgDwxAyBPzADIEzMA8sQMgDwxAyBPzADIEzMA8sQM
gDwxAyBPzADIEzMA8sQMgDwxAyBPzADIe7YHeLdzzvYI/EHF9zszLz9b3O+Wm3Mu+rRvw80Mg
DwxAyBPzADIEzMA8sQMgDwxAyBPzADIEzMA8sQMgDwxAyBPzADIEzMA8sQMgDwxAyBPzADIEz
MA8sQMgDwxAyBPzADIe7YHeMXMbI/AH3TOWVn3076rm3O+OaviujfM/B5uZgDkiRkAeWIGQJ6
YAZAnZgDkiRkAeWIGQJ6YAZAnZgDkiRkAeWIGQJ6YAZAnZgDkiRkAeWIGQJ6YAZAnZgDkiRkA
eWIGQN6cc7ZnAIArbmYA5IkZAHliBkCemAGQJ2YA5IkZAHliBkCemAGQJ2YA5IkZAHliBkCem
AGQJ2YA5IkZAHliBkCemAGQJ2YA5IkZAHliBkCemAGQJ2YA5IkZAHliBkCemAGQJ2YA5IkZAH
liBkCemAGQJ2YA5IkZAHliBkCemAGQJ2YA5IkZAHliBkCemAGQJ2YA5IkZAHliBkDe/wB5w4S
q9G4M2AAAAABJRU5ErkJggg==
ATTENDEE;CN=Wayne Lee;PARTSTAT=REQ-PARTICIPANT;RSVP=TRUE:mailto:song.John#
company.com
CLASS:PUBLIC
DESCRIPTION:Hello\,\n\nWe hope you enjoy your visit
DTEND:20190723T183343
DTSTAMP:20190723T153343Z
DTSTART:20190723T173343
GEO:52.051681;-4.283453
LOCATION:FranceORGANIZER;CN=Wayne Lee:mailto:wayne#digital-forge.co.uk
SEQUENCE:0
SUMMARY:Interview
TRANSP:TRANSPARENT
UID:b9fb0c3e-728c-4121-912e-9412885ebbb4
BEGIN:VALARM
ACTION:DISPLAY
SUMMARY:Alert 1 hour before
TRIGGER:-PT1H
END:VALARM
END:VEVENT
END:VCALENDAR
And then trying to send with the following code:
var ical = new TextPart("calendar")
{
ContentTransferEncoding = ContentEncoding.Default,
ContentDisposition = new ContentDisposition (ContentDisposition.Inline),
Text = calendar
};
ical.ContentType.Parameters.Add("method", "REQUEST");
message.Body = ical;
Any help would be greatly appreciated.
Thanks
The calendar invite comes through fine for me to accept/decline etc but via email, the attachment does not show.
Based on a sample meeting request that I sent to myself from Outlook, Outlook does not add a Content-Disposition to the text/calendar part.
It also base64 encodes it.
Try this:
var ical = new TextPart("calendar")
{
ContentTransferEncoding = ContentEncoding.Base64,
Text = calendar
};
ical.ContentType.Parameters.Add("method", "REQUEST");
I also noticed that Outlook tends to construct a MIME message with the following structure (which may or may not be needed):
multipart/alternative
text/plain
text/html
text/calendar

Show all burndown projects with the tuleap API

English :
Hello everybody !
Do you know if it is possible to recover from the API of the project planning and management tool "Tuleap" the burndown urls of all the projects to which the original user of the request has access?
After several searches in the documentation of the tool and on the internet, I still can not find an answer.
Thank you for the help you can give me! :)
Français :
Bonjour tout le monde !
Savez-vous s'il est possible de récupérer à partir de l'API de l'outil de planification et gestion de projet "Tuleap" les urls des burndown de l'intégralité des projets auxquels à accès l'utilisateur originaire de la requête ?
Après plusieurs recherche dans la documentation de l'outil et sur internet, je n'arrive toujours pas à trouver de réponse.
Merci pour l'aide que vous pourrez m'apporter ! :)

geocode don't show subpremise address Brazil

how to collect room number information on a building in the google geocode?
in my search don't show. SUBPREMISE
example address: rua joao samaha 1385, sala 403 bl 02 sao joao batista, belo horizonte, MG, Brazil.
https://maps.googleapis.com/maps/api/geocode/json?address=
I'm a developer at SmartyStreets, an international address verification API provider. Here's the component information that we have on that address:
[
{
// preceding data omitted
"components":{
"administrative_area":"MG",
"building":"Bloco 02",
"dependent_locality":"São João Batista (Venda Nova)",
"country_iso_3":"BRA",
"locality":"Belo Horizonte",
"postal_code":"31520-100",
"postal_code_short":"31520-100",
"premise":"1385",
"premise_number":"1385",
"thoroughfare":"Rua João Samaha",
"thoroughfare_name":"Joao Samaha",
"thoroughfare_type":"Rua",
"building_leading_type":"Bloco",
"sub_building_type":"Sala",
"sub_building_number":"403"
},
// remaining data omitted
}
]
Does that information help?
https://smartystreets.com/docs/international#components

nltk in python to extract information from web page

how can I use nltk in python to extract information from web page (job offers in my case)
I use this code to extract a part of text ,
import nltk
import time
import urllib2
from urllib2 import urlopen
from cookielib import CookieJar
import datetime
website = "http://tanitjobs.com/search-results-jobs/"
topSplit = "<div class=\"offre\">"
ButtomSplit = "<div class=\"offre-emploi \">"
cj = CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
opener.addheaders = [('Uer-agent', 'Mozilla/5.0')]
def main():
try:
ss =opener.open(website).read()
sourceCodeSplit = ss.split(topSplit)[1].split(ButtomSplit)[0]
texte = nltk.clean_html(sourceCodeSplit)
print texte
except Exception,e:
print 'fail in the main loop'
print str(e)
main()
but I don't know how to do it if I would extract specific paragraph (job offers) from a web page in general
Firstly, you will need urllib.request from python3, see http://docs.python.org/3.0/library/urllib.request.html
Next, BeautifulSoup is your friend: http://www.crummy.com/software/BeautifulSoup/bs4/doc/. I find this useful in installing bs4 in py3.x see http://annelagang.blogspot.fr/2012/11/beautifulsoup-4-for-python-3x.html
Here's a working example:
import urllib.request
from bs4 import BeautifulSoup as bs
user_agent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7'
headers={'User-Agent':user_agent,}
url="http://tanitjobs.com/search-results-jobs/"
request=urllib.request.Request(url,None,headers) #The assembled request
response = urllib.request.urlopen(request)
data = response.read()
for i in bs(data).find_all(attrs={"class": "offre-emploi vedette"}):
print(" ".join(i.find("div",attrs={"class":"detail"}).text.split()))
print
[out]:
Téléopérateurs (trices) Quality Com Center QualityCom sis a
Montplaisir recrute des téléopérateurs (trices), en... Voir toutes les
offres de Quality Com Center
Contrôleur de gestion Eureka Developpement Humain Pour le compte d’une
Multinationale dans le domaine de l'industrie, nous recrutons un :...
Voir toutes les offres de Eureka Developpement Humain
Responsable ressources humaines (H/F) Eureka Developpement Humain Pour
son propre compte Eureka Développement Humain Recrute : Responsable...
Voir toutes les offres de Eureka Developpement Humain
Contrôleur Financier Junior Proxy Tunisie Rattaché au Directeur
Administratif et Financier pays, votre rôle est de garantir la
gestion... Voir toutes les offres de Proxy Tunisie
Superviseur en prise de rdv ( énergie renouvelable ) Quality Com
Center Quality Com Center sis a Montplaisir Recrute 1 Superviseur(e)
en Panneaux... Voir toutes les offres de Quality Com Center
Téléconseillers (h/f) Axess global services AXESS GLOBAL SERVICES
Recrutement Vous souhaitez travailler dans une Enterprise jeune et...
Voir toutes les offres de Axess global services