Viele kennen das Problem: Der LinkedIn-Feed einer Firma kann nicht in Webseiten eingebettet werden. Auch manche möchten eine Art Social Wall erstellen, was leider auch nicht möglich ist.
Ich habe eine Möglichkeit gefunden – und möchte diese im Folgenden mit euch teilen.
1. Die Funktionsweise
Das ganze funktioniert leider nur über ein Paar umwege, da Microsoft die Feeds sehr aktiv schützt. Deshalb verwenden wir hier ein Python-Script, welches im Hintergrund von einem Server ausgeführt wird. Dieses Script öffnet einen Browser meldet sich an und macht dann Screenshots von den einzelnen Feed-Beiträgen.
2. Voraussetzungen
a) Für Feed / einzelne Bilder
Das Programm generiert in einem Ordner auf dem Server die Bilder, welche dann von eurer Webseite / dem Ort wo ihr den Feed ausführen, angezeigt und grafisch aufgearbeitet dargestellt.
Benötigt: Server, der Python-Scripte ausführen kann und diese geplant ausführen kann (z.B. Windows Server, Ubuntu Server, …)
b) Social Wall
- Kleincomputer (z.B. Raspberry Pi)
- Monitor / Beamer zum Anzeigen der Wall
- Entsprechende Anschlusskabel
3. LinkedIn-Feed-Screenshots erstellen und verwenden
Als erstes erstellen wir das Script, welches die Screenshots vom Feed speichert. Übrigens: Alle Skripte sind unten zum Herunterladen freigegeben, alle Skripte sind unter CC-BY-NC-SA lizenziert, kommerzielle Nutzer können unter licensing@philipprogramm.de eine entsprechende Lizens erwerben.
Das Python-Programm speichert die einzelnen Feed-Beiträge je als Foto in einem Ordner.
1 2 3 4 5 6 7 8 9 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 83 | from selenium import webdriver from PIL import Image import time # SETUP VARIABLES (Enter your Data) LinkedInUrl = "" # URL of Feed to get EMail = "" # Your LinkedIn-Account Login E-Mail Password = "" # Your LinkedIn Password count = 30 # how many feed post should be loaded? internetSleep = 2 # If you get grey Pictures, set this delay higher folder = "feed" # Folder of the generated pictures # FireFox init driver = webdriver.Firefox() driver.maximize_window() # open LinkedIn driver.get('https://www.linkedin.com/company/intel-corporation/') # LOGIN driver.get('https://www.linkedin.com/uas/login?trk=nav_header_signin') # enter E-Mail email_field = driver.find_element_by_id('username') email_field.send_keys(EMail) # enter Password password_field = driver.find_element_by_id('password') password_field.send_keys(Password) # Submit password_field.submit() time.sleep(5) # Open Feed driver.get(LinkedInUrl) # Scroll Down and Load Content i_scroll = 0 while i_scroll < count: driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") time.sleep(3) i_scroll = i_scroll + 1 # Scroll Down and Capture Content feedelements = driver.find_elements_by_class_name('occludable-update') # Find Feed Posts i_posts = 0 for feedpost in feedelements: if i_posts + 1 > count: break # Get Location location = feedpost.location size = feedpost.size # Scroll to Location driver.execute_script("window.scrollTo(0, "+ str(location['y']-52) +");") # Get New Location location = feedpost.location size = feedpost.size # Wait for slow Internet time.sleep(internetSleep) # Save Screenshot driver.save_screenshot("image_temp.png") # Size Screenshot x = location['x'] y = 52 width = location['x']+size['width'] height = 52+size['height'] # Corp Screenshot im = Image.open('image_temp.png') im = im.crop((int(x), int(y), int(width), int(height))) im.save(folder + '/post'+ str(i_posts) +'.png') i_posts = i_posts + 1 driver.quit() |
Einfach am Anfang des Programms die Variablen setzten, dann sollte es funktionieren!
Nun muss das Programm automatisch ausgeführt werden. Dies kann z.B. Bei Windows Server mit der Windows-Aufgabenverwaltung oder unter Linux mit Crontab erledigt werden, eventuell erscheinen hierzu noch Tutorials.
Jetzt kann die Webseite die Bilder aus dem Ordner nutzen, um den Feed anzuzeigen. Hierzu ein Beispiel, wie dies mit PHP erledigt werden könnte:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?php $ordner = "feed"; // Get folder $alledateien = scandir($ordner); foreach ($alledateien as $datei) { $dateiinfo = pathinfo($ordner."/".$datei); if ($datei != "." && $datei != ".." && $datei != "_notes") { // OUTPUT ?> <img src="<?php echo $ordner . "/" . $datei;?>"> <?php }; }; ?> |
4. LinkedIn-Social Wall
Die Funktionsweise der Social Wall ist nicht anders als die des oben beschriebenen Feeds. Nur dass diese noch etwas schicker aussieht 🙂 schaut es euch doch mal an: demo.philipprogramm.de/linkedin-feed.
Ihr könnt mithilfe dieses Repositorys sehr einfach eine Social-Wall erstellen.
Dazu müsst ihr die getfeed.py mehrfach klonen, dann die entsprechenden Daten eingeben.
Die Ordner sind column1
(für die erste Spalte), column2
(für die zweite Spalte), column3
(für die dritte Spalte) und zu guter letzt column4
für die letzte Spalte.
Ihr müsst euren Server anweisen, die Programme regelmäßig auszuführen (z.B. mit einem Cronjob) und einen entsprechenden Meta-Tag in der index.php
einfügen, sodass sich auch die Webseite immer mit dem Python-Programm aktualisiert.
Jetzt könnt ihr unter der Adresse eures Servers die Social Wall nutzen.
4.1 Hintergrund der Social-Wall ändern
Einfach die die Datei background.config ändern mit folgenden Werten:
- backgrounds_autumn für Herbstbilder
- backgrounds_spring für Frühlingsbilder
- backgrounds_summer für Sommerbilder
- backgrounds_technology für Technik-Bilder
- backgrounds_winter für Winter Bilder
Wenn ihr einen Ordner mit anderen Namen erstellt und die Bilder als bg0.jpg, bg1.jpg, … abspeichert, dann könnt ihr einfach in der background.config den Namen zum Ordnernamen ändern und diese Bilder als Hintergrund nutzen!
Download
Von GitHub: https://github.com/philipprogramm/LinkedInFeed
ACHTUNG: Der Download ist unter der Lizenz CC-BY-NC-SA. Siehe oben für weitere Informationen.
Ich hoffe, ich konnte euch helfen!
Philipp