电台脚本ghiChannel.sh (有zenity做的gui界面)

sh/bash/dash/ksh/zsh等Shell脚本
头像
xiooli
帖子: 6956
注册时间: 2007-11-19 21:51
来自: 成都
送出感谢: 0
接收感谢: 3 次
联系:

电台脚本ghiChannel.sh (有zenity做的gui界面)

#1

帖子 xiooli » 2008-10-19 14:53

^^ RT

昨天某人提到了一个叫hiChannel.sh (http://fourdollars.blogspot.com/search/ ... Channel.sh)的电台脚本,很不错,我给加了一个简单的gui,去除了其中定时提醒的功能,还马马虎虎啦,欢迎使用。 :em01
附件
ghiChannel.sh.tar.bz2
(3.38 KiB) 下载 315 次
Screenshot-ghiChannel 播放器 V-08.10.19.png
Screenshot-ghiChannel 播放器 V-08.10.19.png (19.63 KiB) 查看 3055 次
Screenshot-ghiChannel 播放器 V-08.10.19-1.png
Screenshot-ghiChannel 播放器 V-08.10.19-1.png (21.12 KiB) 查看 3055 次
Screenshot-ghiChannel 播放器 V-08.10.19-2.png
Screenshot-ghiChannel 播放器 V-08.10.19-2.png (13.42 KiB) 查看 3050 次
头像
xiooli
帖子: 6956
注册时间: 2007-11-19 21:51
来自: 成都
送出感谢: 0
接收感谢: 3 次
联系:

Re: 电台脚本ghiChannel.sh (有zenity做的gui界面)

#2

帖子 xiooli » 2008-10-19 14:55

代码在此:

代码: 全选

#!/usr/bin/env bash
#This is a tuner using zenity based on FourDollars' hichannel.sh (http://fourdollars.blogspot.com/search/label/hiChannel.sh)
name="Name: ghiChannel zenity tuner"
copyright="Copyright (R): 2008-2009 xiooli (xioooli@yahoo.com.cn)"
license="License: GPLv3"
version="Version: 08.10.19"
declare -i option_verbose=0
declare -i option_live_tv=0

function player ()
{
	case $(uname) in
		Darwin)
		open -a "QuickTime Player" $1 && osascript -e "tell application \"QuickTime Player\"" -e "tell document 1" -e "play" -e "end tell" -e "end tell"
		;;
		*BSD)
		mplayer $1 &
        play_id="$!"
		;;
		Linux)
		if [ ! -z "$(which mimms)" ] && [ ! -z "$(which ffplay)" ]; then
			mimms $1 - | ffplay - &
            play_id="$!"
		elif [ ! -z "$(which gst-launch)" ]; then
			gst-launch playbin uri=$1 &
            play_id="$!"
		elif [ ! -z "$(which mplayer)" ]; then
			mplayer $1 &
            play_id="$!"
		elif [ ! -z "$(which xine)" ]; then
			xine $1 &
            play_id="$!"
		elif [ ! -z "$(which totem)" ]; then
			totem $1 &
            play_id="$!"
		fi
		;;
	esac
}

program_name="ghiChannel 播放器 ${version/ersion: /-}"

prompt_message='請選擇:'

category_list=(music life news others foreign culture traffic live)

category_name=(音樂 生活資訊 新聞 綜合 外語 多元文化 交通 免費影視)

music_site_list=(
	'ASIAFM 衛星音樂台' '321'
	'Apple line 蘋果線上' '248'
	'BestRadio 台中好事903' '211'
	'BestRadio 台北好事989' '212'
	'BestRadio 花蓮好事935' '303'
	'BestRadio 高雄港都983' '213'
	'Flyradio 飛揚調頻895' '357'
	'HitFm 聯播網 台中91.5' '88'
	'HitFm 聯播網 高雄90.1' '90'
	'HitFm 聯播網 台北91.7' '87'
	'KISS RADIO 南投廣播' '258'
	'KISS RADIO 台南知音廣播' '255'
	'KISS RADIO 大苗栗廣播' '256'
	'KISS RADIO 大眾廣播電台' '156'
	'KISS RADIO 網路音樂台' '308'
	'中廣古典網' '162'
	'中廣流行網' '205'
	'中廣音樂網 i radio' '206'
	'佳音CCM' '304'
	'全國廣播音樂網' '338'
	'台北之音經典音樂台' '222'
	'台北愛樂' '228'
	'台灣之音-音樂' '313'
	'太陽電台' '289'
	'奇美古典音樂網' '294'
	'寶島新聲廣播電台' '259'
)

life_site_list=(
	'ASIA FM92.3 亞太電台' '295'
	'ASIA FM92.7 亞州電台' '210'
	'GOLD FM-台中城市廣播' '226'
	'GOLD FM-台北健康電台' '229'
	'IC之音' '148'
	'佳音廣播電台' '201'
	'佳音電台2台' '250'
	'全國廣播' '202'
	'台中廣播' '230'
	'台北廣播電台- 都會資訊頻道' '208'
	'台北廣播電台喔海洋頻道' '238'
	'台視數位廣播' '319'
	'大千電台' '109'
	'大愛網路電台' '325'
	'宜蘭中山電台' '301'
	'環宇廣播' '282'
	'真心之音廣播電台' '217'
	'蒲公英聖樂網' '337'
	'警廣長青網' '271'
	'青春線上' '356'
	'飛碟電台' '232'
)

news_site_list=(
	'NEWS98新聞網' '187'
	'中廣新聞網' '207'
)

others_site_list=(
	'台灣之音-華語' '315'
	'復興廣播電台 短波網' '288'
	'復興廣播電台 第一網' '286'
	'復興廣播電台 第二網' '287'
	'正聲台北調幅台' '317'
	'正聲台北調頻台' '198'
	'漢聲光華網-中波' '281'
	'漢聲光華網-短波' '309'
	'漢聲廣播電台' '215'
	'漢聲廣播電台全國調頻網' '216'
	'綠色和平台灣文化廣播電台' '327'
)

foreign_site_list=(
	'ICRT' '177'
	'台灣之音-FM' '312'
	'台灣之音-亞洲' '311'
	'台灣之音-歐美及方言' '314'
)

culture_site_list=(
	'中廣客家頻道' '160'
	'大漢之音' '300'
	'寶島客家' '241'
	'新客家廣播電台' '254'
	'高屏溪客家電台' '298'
)

traffic_site_list=(
	'警廣—交通網台東台' '358'
	'警廣全國交通網' '269'
	'警廣台中台' '260'
	'警廣台北台' '261'
	'警廣台南台' '263'
	'警廣宜蘭台' '265'
	'警廣新竹台' '268'
	'警廣花蓮台' '266'
	'警廣高雄台' '267'
)

live_site_list=(
	'世棒2台' '603'
	'世界盃棒球直播' '996'
	'KuLife' '997'
	'KuMovie' '998'
	'KuDrama' '999'
	'Bloomberg Television' '1001'
	#'中視' '36'
	'中天新聞台' '37'
	'大愛電視台' '38'
	'華視影音頻道' '50'
	'生命電視台' '54'
	'大愛電視二台' '57'
	#'台灣樂起來(樂透開獎)' '58'
	#'NOKIA音樂讓我說演唱會' '604'
	'流行追蹤' '21'
)

function read_category ()
{
	size=${#category_list[@]}
	for ((i=0; i<size; i++)); do
		echo " $((i+1)) ${category_name[$i]}"
	done
}

function read_channel ()
{
	echo -e "   0 回到上一層"
	eval size=\${#${category_list[$((category-1))]}_site_list[@]}
	for ((i=0; i<size/2; i++)); do
		eval name=\${${category_list[$((category-1))]}_site_list[$((i*2))]}
		echo "$((i+1))" "${name// /_}"
	done
}

function wmp_get ()
{
	if [ "$(uname)" != "Darwin" ]; then
		if [ ! -z $(which wget) ]; then
			wget -q --user-agent 'Windows Media Player' --referer 'http://www.hichannel.hinet.net' -O - "$*"
		elif [ ! -z $(which curl) ]; then
			curl -q --user-agent 'Windows Media Player' --referer 'http://www.hichannel.hinet.net' --location -o - "$*"
		fi
	else
		curl -q --user-agent 'Windows Media Player' --referer 'http://www.hichannel.hinet.net' --location -o - "$*"
	fi
}

function hinet_radio_url ()
{
	wmp_get $(wmp_get "http://www.hichannel.hinet.net/api/streamFreeRadio.jsp?id=$*" | grep mms | cut -d '"' -f 2) | grep 203 | cut -d '"' -f 2
}

function hinet_video_url ()
{
	wmp_get $(wmp_get "http://www.hichannel.hinet.net/api/streamFreeLive.jsp?id=$*&quality=high" | grep mms | cut -d '"' -f 2) | grep 203 | cut -d '"' -f 2
}

function media_player ()
{
    if [ $option_live_tv = 1 ] ; then
        player $(hinet_video_url $1)
    else
        player $(hinet_radio_url $1)
    fi
}

function get_mode ()
{
    if [ "$option_live_tv" = "1" ]; then
        mode="live模式"
    elif [ "$option_verbose" = "1" ];then
        mode="version模式"
    else
        mode="其他模式"
    fi
	
}

function main_func ()
{
    while [ "${category:-nil}" = "nil" ]; do
        get_mode
    	category=$(zenity --list --title="${program_name}" --text="($mode)选择类别:" --column="序号" --column="名称" "0" "程序设置" $(read_category))
        [ "$?" -eq 1 ] &&  exit
        [ "$category" = "0" ] && category="" && parse_parameter
        while [ "${channel:-nil}" = "nil" -a "${category:-nil}" != "nil" ]; do
            channel=$(zenity --list --title="${program_name}" --text="($mode)类别${category}(${category_name[$((category-1))]}),请选择频道:" --column="序号" --column="名称" $(read_channel))
            if [ "$?" -eq 1 -o "$channel" = "0" ]; then
                category=""
                break
            elif [ "${channel:-nil}" = "nil" ]; then
                continue
            fi
        done		
	done

	eval channelname=\${${category_list[$((category-1))]}_site_list[$((channel*2-2))]}
	eval Channel=\${${category_list[$((category-1))]}_site_list[$((channel*2-1))]}

	[ $category = 8 ] && option_live_tv=1

    channel=""
    category=""

	media_player $Channel
    terminat=$(zenity --list --title="${program_name}" --text="现在播放的是 [$channelname]" --column="ID" --column="是否终止播放?" "$play_id" "终止播放")
    [ "$terminat" = "$play_id" ] && kill -9 $play_id
}

function show_about ()
{
    zenity --info --width=300 --title="关于${program_name}" --text="${name}\n${copyright}\n${version}\n${license}"
}

function parse_parameter ()
{
    param=$(zenity --list --title="系统设置" --text="选择条目:" --column="序号" --column="条目" "1" "关于" \
    "2" "live模式" "3" "verbose模式" "4" "其他模式")
	case $param in
		1)
		show_about
		;;
		2)
		option_live_tv=1
		option_verbose=0
		;;
		3)
		option_verbose=1
		option_live_tv=0
		;;
		4)
		option_live_tv=0
		option_verbose=0
	esac
}

function system_check ()
{
	if [ "$(uname)" != "Darwin" ]; then
		if [ -z "$(which wget)" -a -z "$(which curl)" ]; then
			zenity --warning --title="播放条件不满足" --text="$0 needs wget or curl, please install one of them."
			exit
		fi
	fi

	case $(uname) in
		*BSD)
		if [ -z "$(which mplayer)" ]; then
			zenity --warning --title="播放条件不满足" --text="$0 needs mplayer, please install it."
			exit
		fi
		;;
		Linux)
		if [ -z "$(which mimms)" -a -z "$(which ffplay)" -a -z "$(which gst-launch)" -a -z "$(which mplayer)" -a -z "$(which xine)" -a -z "$(which totem)" ]; then
			zenity --warning --title="播放条件不满足" --text="$0 needs mplayer/xine/totem, please install one of them."
			exit
		fi
		;;
	esac
}

system_check
while :;do
    main_func
done
头像
skyx
论坛版主
帖子: 9203
注册时间: 2006-12-23 13:46
来自: Azores Islands
送出感谢: 0
接收感谢: 1 次
联系:

Re: 电台脚本ghiChannel.sh (有zenity做的gui界面)

#3

帖子 skyx » 2008-10-19 15:08

:shock:
no security measure is worth anything if an attacker has physical access to the machine
头像
xinzhi
帖子: 238
注册时间: 2008-03-05 15:41
来自: 中国广西防城港
送出感谢: 0
接收感谢: 0
联系:

Re: 电台脚本ghiChannel.sh (有zenity做的gui界面)

#4

帖子 xinzhi » 2008-10-19 15:14

嘻嘻 :em02 :em11
头像
xinzhi
帖子: 238
注册时间: 2008-03-05 15:41
来自: 中国广西防城港
送出感谢: 0
接收感谢: 0
联系:

Re: 电台脚本ghiChannel.sh (有zenity做的gui界面)

#5

帖子 xinzhi » 2008-10-19 15:17

不错,使用正常~

最后在“终止播放”下面增加静音和最小化到托盘的功能就好了~
头像
xiooli
帖子: 6956
注册时间: 2007-11-19 21:51
来自: 成都
送出感谢: 0
接收感谢: 3 次
联系:

Re: 电台脚本ghiChannel.sh (有zenity做的gui界面)

#6

帖子 xiooli » 2008-10-19 15:22

xinzhi 写了:不错,使用正常~

最后在“终止播放”下面增加静音和最小化到托盘的功能就好了~
静音倒是可以,不过最小化到托盘就不知道怎么办了 :em06
头像
xinzhi
帖子: 238
注册时间: 2008-03-05 15:41
来自: 中国广西防城港
送出感谢: 0
接收感谢: 0
联系:

Re: 电台脚本ghiChannel.sh (有zenity做的gui界面)

#7

帖子 xinzhi » 2008-10-19 15:27

恩,现在也不错了~
头像
xiooli
帖子: 6956
注册时间: 2007-11-19 21:51
来自: 成都
送出感谢: 0
接收感谢: 3 次
联系:

Re: 电台脚本ghiChannel.sh (有zenity做的gui界面)

#8

帖子 xiooli » 2008-10-19 15:33

xinzhi 写了:恩,现在也不错了~
刚刚改正了一个小问题,请重新下载 :em06
头像
xinzhi
帖子: 238
注册时间: 2008-03-05 15:41
来自: 中国广西防城港
送出感谢: 0
接收感谢: 0
联系:

Re: 电台脚本ghiChannel.sh (有zenity做的gui界面)

#9

帖子 xinzhi » 2008-10-19 15:34

恩,好的~
wxj120bw
帖子: 24
注册时间: 2008-08-26 23:29
送出感谢: 0
接收感谢: 0

Re: 电台脚本ghiChannel.sh (有zenity做的gui界面)

#10

帖子 wxj120bw » 2008-10-19 16:43

搂主是用vim工具编程的吗
头像
HuntXu
论坛版主
帖子: 5776
注册时间: 2007-09-29 3:09
送出感谢: 0
接收感谢: 6 次

Re: 电台脚本ghiChannel.sh (有zenity做的gui界面)

#11

帖子 HuntXu » 2008-10-19 16:47

脚本党好...

顺道来个建议是否能把电台列表和位置存成文件再用读取,这样修改,增加,删除等管理工作会好做很多,不用每次动脚本了... :em03

我负责点子的~速闪~ :em02
HUNT Unfortunately No Talent...
头像
xiooli
帖子: 6956
注册时间: 2007-11-19 21:51
来自: 成都
送出感谢: 0
接收感谢: 3 次
联系:

Re: 电台脚本ghiChannel.sh (有zenity做的gui界面)

#12

帖子 xiooli » 2008-10-19 18:20

wxj120bw 写了:搂主是用vim工具编程的吗
是地,就写写简单的东东,没有那些高手那么专业 :em03
HuntXu 写了:脚本党好...

顺道来个建议是否能把电台列表和位置存成文件再用读取,这样修改,增加,删除等管理工作会好做很多,不用每次动脚本了... :em03

我负责点子的~速闪~ :em02
说实话,他那个取播放地址的那段我没有搞懂 :em06
头像
bones7456
论坛版主
帖子: 8495
注册时间: 2006-04-12 20:05
来自: 杭州
送出感谢: 0
接收感谢: 8 次
联系:

Re: 电台脚本ghiChannel.sh (有zenity做的gui界面)

#13

帖子 bones7456 » 2008-10-19 18:42

:em11
关注我的blog: ε==3
头像
yjcong
帖子: 2470
注册时间: 2006-02-28 3:11
送出感谢: 0
接收感谢: 0

Re: 电台脚本ghiChannel.sh (有zenity做的gui界面)

#14

帖子 yjcong » 2008-10-19 18:55

看来以后是有可能脱离GTK和QT了(不对, 这个是不是用TK写的?)

LZ试试把mplayer和zenity结合到一起吧, 也许会比smplayer好
一梦三年,
松风依旧,
萝月何曾老.


灵幽听微, 谁观玉颜?
灼灼春华, 绿叶含丹.
头像
xiooli
帖子: 6956
注册时间: 2007-11-19 21:51
来自: 成都
送出感谢: 0
接收感谢: 3 次
联系:

Re: 电台脚本ghiChannel.sh (有zenity做的gui界面)

#15

帖子 xiooli » 2008-10-19 19:23

yjcong 写了:看来以后是有可能脱离GTK和QT了(不对, 这个是不是用TK写的?)

LZ试试把mplayer和zenity结合到一起吧, 也许会比smplayer好
zenity也是用gtk的吧。你认为点一下跳一个窗口的东东好玩么? :em04
回复

回到 “Shell脚本”