
Ursprungligen postat av
Kianian
MrPotatoHead
Har lyckats att lägga in kanalerna men hur går jag tillväga om jag vill lägga till epg också?
Om du inte vill betala för en färdigpackad fil måste du använda en grabber och hämta från t.ex. xmltv.se. Sen beror det också på vilken plattform du kör xbmc, eller om du har en backend som kan bidra. Jag har lekt med OpenELEC på Raspberry Pi, som ju är rätt strippad och tyvärr saknar perl som de flesta grabbers kör. Istället för att försöka lägga in perl slängde jag ihop ett shell-skript. Har inte provat jättenoga så kan säkert finnas något slarvfel. Ett par kommandon kanske behövs ändras om man kör på vanligt linux, då detta är för busybox. Ställ in att det ska köras automatiskt så ofta du vill, inget händer om mindre än 2 dygn passerat.
Lägg det i samma mapp som m3u-filen. Den kan man antingen döpa till iptv.m3u, eller kör skriptet en gång och ändra sedan namnet i config-filen som skapas. Skriptet förutsätter att tvg-id är rätt ifyllt för xmltv.se, och att även ett tvg-name är valt. Kanalerna läses ur m3u-filen och 3 dagars EPG hämtas och förs in i myepg.xml. Slängde in lite kommentarer om någon vill modda vidare.
Kod:
#!/bin/sh
# Shell script xmltv.se grabber for
# IPTVSimple PVR on Raspberry Pi OpenELEC (BusyBox).
# Requires tvg_id (xmltv.se channel name) and tvg_name tags in m3u.
# Ver 0.1, written by MrPotatoHead at comhit.net
# Goto current dir
cd "$( cd "$( dirname "$0" )" && pwd )"
# Check if config is present, create otherwise
if [ ! -f potato_xmltv.config ]; then
echo "# Name of IPTVSimple PVR m3u-file" > potato_xmltv.config
echo "iptv.m3u" >> potato_xmltv.config
echo "# Last run" >> potato_xmltv.config
echo 0 >> potato_xmltv.config
fi
# Save config into variables
mfile=`cat potato_xmltv.config | awk 'NR==2'`
lastch=`cat potato_xmltv.config | awk 'NR==4'`
# Quit if latest run is less than 48h and 2 sec ago
let timecheck=`date +%s`-lastch
if [ "$timecheck" -lt 172802 ]; then
exit 0
fi
# Quit if m3u file is missing
if [ ! -f $mfile ]; then
exit 0
fi
# Update latest run in config
cat potato_xmltv.config | sed '$ d' > temp
echo `date +%s` >> temp
mv temp potato_xmltv.config
# Make temp download folder
mkdir xmltvse
cd xmltvse
# Create two lists with tvg-id and tvg-name from m3u-file
cat ../$mfile | awk -F "tvg-id=\"" '/tvg-id/{print $2}' | awk -F "\"" '{print $1}' > tvg_id
cat ../$mfile | awk -F "tvg-name=\"" '/tvg-name/{print $2}' | awk -F "\"" '{print $1}' > tvg_name
# Count number of channels
lines=`cat tvg_id | wc -l`
# Create EPG header with channel data
count=1
while [ $count -le $lines ]
do
echo $'\t'\<channel id\=\"`awk NR==$count tvg_id`\"\> >> epg_header
echo $'\t'$'\t'\<display-name lang\=\"en\"\>`awk NR==$count tvg_name`\<\/display-name\> | tr _ ' ' >> epg_header
echo $'\t'\<\/channel\> >> epg_header
let count+=1
done
# Save dates for next 3 days in date-file
echo `date -I` > dates
echo `date -I -d "24:00"` >> dates
echo `date -I -d "48:00"` >> dates
# Download, unzip and strip all EPGs from unnecessary lines
countdate=1
while [ $countdate -le 3 ]; do
datevar=`awk NR==$countdate dates`
count=1
while [ $count -le $lines ]; do
epg_file=`awk NR==$count tvg_id`"_"$datevar".xml"
link="http://xmltv.xmltv.se/"$epg_file".gz"
wget $link
gunzip $epg_file".gz"
cat $epg_file | sed '$ d' | awk 'NR > 4' > temp
mv temp $epg_file
let count+=1
done
let countdate+=1
done
# Create EPG xml and concatenate all channels
echo '<?xml version="1.0" encoding="utf-8"?>' > ../myepg.xml
echo "<tv>" >> ../myepg.xml
cat epg_header >> ../myepg.xml
cat *.xml >> ../myepg.xml
echo "</tv>" >> ../myepg.xml
cd ..
# Remove temp folder
rm -r xmltvse
exit 0